/* * libfud * Copyright 2024 Dominick Allen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef FUD_DIRECTORY_HPP #define FUD_DIRECTORY_HPP #include "fud_result.hpp" #include "fud_status.hpp" #include "fud_string.hpp" #include #include #include #include #include namespace fud { enum class DirectoryEntryType : uint8_t { Block, Character, Directory, NamedPipe, SymbolicLink, RegularFile, UnixSocket, Unknown }; /** \brief Simplified Directory Entry */ struct DirectoryEntry { String name; size_t size; size_t links; time_t modificationTime; DirectoryEntryType entryType; }; class Directory { public: explicit Directory(String name); Directory(const Directory& rhs) = delete; Directory(Directory&& rhs); ~Directory(); Directory& operator=(const Directory& rhs) = delete; Directory& operator=(Directory&& rhs); constexpr FudStatus status() const { return m_status; } constexpr int errorCode() const { return m_errorCode; } Result, FudStatus> getNextEntry(); FudStatus reset(); private: String m_name{}; DIR* m_directory{nullptr}; FudStatus m_status{FudStatus::ObjectInvalid}; int m_errorCode{-1}; int m_dirFd{-1}; }; } // namespace fud #endif