Filesystem/Archives: Implemented the SaveData archive

The savedata for each game is stored in /savedata/<ProgramID> for NCCH files. ELF files and 3DSX files use the folder 0 because they have no ID information

Got rid of the code duplication in File and Directory

Files that deal with the host machine's file system now live in DiskFile, similarly for directories and DiskDirectory and archives with DiskArchive.

FS_U: Use the correct error code when a file wasn't found
This commit is contained in:
Subv
2014-12-16 00:33:41 -05:00
parent e6f440ea7f
commit ea9ce0fba7
25 changed files with 458 additions and 490 deletions

View File

@ -6,7 +6,7 @@
#include "common/common_types.h"
#include "core/file_sys/archive_backend.h"
#include "core/file_sys/disk_archive.h"
#include "core/loader/loader.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
@ -15,10 +15,9 @@
namespace FileSys {
/// File system interface to the SDMC archive
class Archive_SDMC final : public ArchiveBackend {
class Archive_SDMC final : public DiskArchive {
public:
Archive_SDMC(const std::string& mount_point);
~Archive_SDMC() override;
/**
* Initialize the archive.
@ -27,67 +26,6 @@ public:
bool Initialize();
std::string GetName() const override { return "SDMC"; }
/**
* Open a file specified by its path, using the specified mode
* @param path Path relative to the archive
* @param mode Mode to open the file with
* @return Opened file, or nullptr
*/
std::unique_ptr<FileBackend> OpenFile(const Path& path, const Mode mode) const override;
/**
* Delete a file specified by its path
* @param path Path relative to the archive
* @return Whether the file could be deleted
*/
bool DeleteFile(const FileSys::Path& path) const override;
/**
* Rename a File specified by its path
* @param src_path Source path relative to the archive
* @param dest_path Destination path relative to the archive
* @return Whether rename succeeded
*/
bool RenameFile(const FileSys::Path& src_path, const FileSys::Path& dest_path) const override;
/**
* Delete a directory specified by its path
* @param path Path relative to the archive
* @return Whether the directory could be deleted
*/
bool DeleteDirectory(const FileSys::Path& path) const override;
/**
* Create a directory specified by its path
* @param path Path relative to the archive
* @return Whether the directory could be created
*/
bool CreateDirectory(const Path& path) const override;
/**
* Rename a Directory specified by its path
* @param src_path Source path relative to the archive
* @param dest_path Destination path relative to the archive
* @return Whether rename succeeded
*/
bool RenameDirectory(const FileSys::Path& src_path, const FileSys::Path& dest_path) const override;
/**
* Open a directory specified by its path
* @param path Path relative to the archive
* @return Opened directory, or nullptr
*/
std::unique_ptr<DirectoryBackend> OpenDirectory(const Path& path) const override;
/**
* Getter for the path used for this Archive
* @return Mount point of that passthrough archive
*/
std::string GetMountPoint() const;
private:
std::string mount_point;
};
} // namespace FileSys