// Copyright 2014 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include "core/file_sys/archive_backend.h" #include "core/hle/result.h" //////////////////////////////////////////////////////////////////////////////////////////////////// // FileSys namespace namespace FileSys { /// Archive backend for SDMC archive class SDMCArchive : public ArchiveBackend { public: explicit SDMCArchive(const std::string& mount_point_) : mount_point(mount_point_) {} std::string GetName() const override { return "SDMCArchive: " + mount_point; } ResultVal> OpenFile(const Path& path, const Mode& mode) const override; ResultCode DeleteFile(const Path& path) const override; ResultCode RenameFile(const Path& src_path, const Path& dest_path) const override; ResultCode DeleteDirectory(const Path& path) const override; ResultCode DeleteDirectoryRecursively(const Path& path) const override; ResultCode CreateFile(const Path& path, u64 size) const override; ResultCode CreateDirectory(const Path& path) const override; ResultCode RenameDirectory(const Path& src_path, const Path& dest_path) const override; ResultVal> OpenDirectory(const Path& path) const override; u64 GetFreeBytes() const override; protected: ResultVal> OpenFileBase(const Path& path, const Mode& mode) const; std::string mount_point; }; /// File system interface to the SDMC archive class ArchiveFactory_SDMC final : public ArchiveFactory { public: explicit ArchiveFactory_SDMC(const std::string& mount_point); /** * Initialize the archive. * @return true if it initialized successfully */ bool Initialize(); std::string GetName() const override { return "SDMC"; } ResultVal> Open(const Path& path, u64 program_id) override; ResultCode Format(const Path& path, const FileSys::ArchiveFormatInfo& format_info, u64 program_id) override; ResultVal GetFormatInfo(const Path& path, u64 program_id) const override; private: std::string sdmc_directory; }; } // namespace FileSys