#pragma once #include #include #include namespace hex { class Tar { public: enum class Mode { Read, Write, Create }; Tar() = default; Tar(const std::fs::path &path, Mode mode); ~Tar(); Tar(const Tar&) = delete; Tar(Tar&&) noexcept; Tar &operator=(Tar &&other) noexcept; void close(); /** * @brief get the error string explaining the error that occured when opening the file. * This error is a combination of the tar error and the native file open error */ std::string getOpenErrorString() const; [[nodiscard]] std::vector readVector(const std::fs::path &path); [[nodiscard]] std::string readString(const std::fs::path &path); void writeVector(const std::fs::path &path, const std::vector &data); void writeString(const std::fs::path &path, const std::string &data); [[nodiscard]] std::vector listEntries(const std::fs::path &basePath = "/"); [[nodiscard]] bool contains(const std::fs::path &path); void extract(const std::fs::path &path, const std::fs::path &outputPath); void extractAll(const std::fs::path &outputPath); [[nodiscard]] bool isValid() const { return this->m_valid; } private: mtar_t m_ctx = { }; std::fs::path m_path; bool m_valid = false; // These will be updated when the constructor is called int m_tarOpenErrno = MTAR_ESUCCESS; int m_fileOpenErrno = 0; }; }