summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar wwylele2016-10-16 23:09:36 +0800
committerGravatar wwylele2016-11-19 17:17:19 +0200
commit0e754875d175bfec393a3f4c4f6ad73f45ed361f (patch)
tree44aa53889179a678a0ec9b0015d83613913c5202 /src
parentFileSys: add PathParser (diff)
downloadyuzu-0e754875d175bfec393a3f4c4f6ad73f45ed361f.tar.gz
yuzu-0e754875d175bfec393a3f4c4f6ad73f45ed361f.tar.xz
yuzu-0e754875d175bfec393a3f4c4f6ad73f45ed361f.zip
FileSys: remove Open from DirectoryBackend
Open should not be an interface exposed by Directory because it is the Archive thats implement the methed to open the directory. The service API of 3DS also implies this - Open is not a function of directory service, but is of FS main service
Diffstat (limited to 'src')
-rw-r--r--src/core/file_sys/directory_backend.h6
-rw-r--r--src/core/file_sys/disk_archive.cpp17
-rw-r--r--src/core/file_sys/disk_archive.h4
-rw-r--r--src/core/file_sys/ivfc_archive.h3
4 files changed, 5 insertions, 25 deletions
diff --git a/src/core/file_sys/directory_backend.h b/src/core/file_sys/directory_backend.h
index b55e382ef..0c93f2074 100644
--- a/src/core/file_sys/directory_backend.h
+++ b/src/core/file_sys/directory_backend.h
@@ -41,12 +41,6 @@ public:
41 virtual ~DirectoryBackend() {} 41 virtual ~DirectoryBackend() {}
42 42
43 /** 43 /**
44 * Open the directory
45 * @return true if the directory opened correctly
46 */
47 virtual bool Open() = 0;
48
49 /**
50 * List files contained in the directory 44 * List files contained in the directory
51 * @param count Number of entries to return at once in entries 45 * @param count Number of entries to return at once in entries
52 * @param entries Buffer to read data into 46 * @param entries Buffer to read data into
diff --git a/src/core/file_sys/disk_archive.cpp b/src/core/file_sys/disk_archive.cpp
index ce6b9360b..fef6e68a2 100644
--- a/src/core/file_sys/disk_archive.cpp
+++ b/src/core/file_sys/disk_archive.cpp
@@ -112,10 +112,11 @@ ResultCode DiskArchive::RenameDirectory(const Path& src_path, const Path& dest_p
112 112
113ResultVal<std::unique_ptr<DirectoryBackend>> DiskArchive::OpenDirectory(const Path& path) const { 113ResultVal<std::unique_ptr<DirectoryBackend>> DiskArchive::OpenDirectory(const Path& path) const {
114 LOG_DEBUG(Service_FS, "called path=%s", path.DebugStr().c_str()); 114 LOG_DEBUG(Service_FS, "called path=%s", path.DebugStr().c_str());
115 auto directory = std::make_unique<DiskDirectory>(*this, path); 115 auto full_path = mount_point + path.AsString();
116 if (!directory->Open()) 116 if (!FileUtil::IsDirectory(full_path))
117 return ResultCode(ErrorDescription::FS_NotFound, ErrorModule::FS, ErrorSummary::NotFound, 117 return ResultCode(ErrorDescription::FS_NotFound, ErrorModule::FS, ErrorSummary::NotFound,
118 ErrorLevel::Permanent); 118 ErrorLevel::Permanent);
119 auto directory = std::make_unique<DiskDirectory>(full_path);
119 return MakeResult<std::unique_ptr<DirectoryBackend>>(std::move(directory)); 120 return MakeResult<std::unique_ptr<DirectoryBackend>>(std::move(directory));
120} 121}
121 122
@@ -211,21 +212,11 @@ bool DiskFile::Close() const {
211 212
212//////////////////////////////////////////////////////////////////////////////////////////////////// 213////////////////////////////////////////////////////////////////////////////////////////////////////
213 214
214DiskDirectory::DiskDirectory(const DiskArchive& archive, const Path& path) : directory() { 215DiskDirectory::DiskDirectory(const std::string& path) : directory() {
215 // TODO(Link Mauve): normalize path into an absolute path without "..", it can currently bypass
216 // the root directory we set while opening the archive.
217 // For example, opening /../../usr/bin can give the emulated program your installed programs.
218 this->path = archive.mount_point + path.AsString();
219}
220
221bool DiskDirectory::Open() {
222 if (!FileUtil::IsDirectory(path))
223 return false;
224 unsigned size = FileUtil::ScanDirectoryTree(path, directory); 216 unsigned size = FileUtil::ScanDirectoryTree(path, directory);
225 directory.size = size; 217 directory.size = size;
226 directory.isDirectory = true; 218 directory.isDirectory = true;
227 children_iterator = directory.children.begin(); 219 children_iterator = directory.children.begin();
228 return true;
229} 220}
230 221
231u32 DiskDirectory::Read(const u32 count, Entry* entries) { 222u32 DiskDirectory::Read(const u32 count, Entry* entries) {
diff --git a/src/core/file_sys/disk_archive.h b/src/core/file_sys/disk_archive.h
index 0edd87954..c93c32eb2 100644
--- a/src/core/file_sys/disk_archive.h
+++ b/src/core/file_sys/disk_archive.h
@@ -75,13 +75,12 @@ protected:
75 75
76class DiskDirectory : public DirectoryBackend { 76class DiskDirectory : public DirectoryBackend {
77public: 77public:
78 DiskDirectory(const DiskArchive& archive, const Path& path); 78 DiskDirectory(const std::string& path);
79 79
80 ~DiskDirectory() override { 80 ~DiskDirectory() override {
81 Close(); 81 Close();
82 } 82 }
83 83
84 bool Open() override;
85 u32 Read(const u32 count, Entry* entries) override; 84 u32 Read(const u32 count, Entry* entries) override;
86 85
87 bool Close() const override { 86 bool Close() const override {
@@ -89,7 +88,6 @@ public:
89 } 88 }
90 89
91protected: 90protected:
92 std::string path;
93 u32 total_entries_in_directory; 91 u32 total_entries_in_directory;
94 FileUtil::FSTEntry directory; 92 FileUtil::FSTEntry directory;
95 93
diff --git a/src/core/file_sys/ivfc_archive.h b/src/core/file_sys/ivfc_archive.h
index af6297e1f..826261441 100644
--- a/src/core/file_sys/ivfc_archive.h
+++ b/src/core/file_sys/ivfc_archive.h
@@ -75,9 +75,6 @@ private:
75 75
76class IVFCDirectory : public DirectoryBackend { 76class IVFCDirectory : public DirectoryBackend {
77public: 77public:
78 bool Open() override {
79 return false;
80 }
81 u32 Read(const u32 count, Entry* entries) override { 78 u32 Read(const u32 count, Entry* entries) override {
82 return 0; 79 return 0;
83 } 80 }