diff options
author | Lioncash <mathew1800@gmail.com> | 2018-11-30 20:44:13 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2018-12-01 02:17:28 +0100 |
commit | a7d9fe993a3e0e4d939752d2e447cc2b5fdb80f0 (patch) | |
tree | f5932b1a6b6451c41565b9b5a74dfff4f44fb6f0 /src/core/file_sys | |
parent | Merge pull request #1829 from lioncash/lang (diff) | |
download | yuzu-a7d9fe993a3e0e4d939752d2e447cc2b5fdb80f0.tar yuzu-a7d9fe993a3e0e4d939752d2e447cc2b5fdb80f0.tar.gz yuzu-a7d9fe993a3e0e4d939752d2e447cc2b5fdb80f0.tar.bz2 yuzu-a7d9fe993a3e0e4d939752d2e447cc2b5fdb80f0.tar.lz yuzu-a7d9fe993a3e0e4d939752d2e447cc2b5fdb80f0.tar.xz yuzu-a7d9fe993a3e0e4d939752d2e447cc2b5fdb80f0.tar.zst yuzu-a7d9fe993a3e0e4d939752d2e447cc2b5fdb80f0.zip |
Diffstat (limited to 'src/core/file_sys')
-rw-r--r-- | src/core/file_sys/vfs.cpp | 26 | ||||
-rw-r--r-- | src/core/file_sys/vfs.h | 15 |
2 files changed, 37 insertions, 4 deletions
diff --git a/src/core/file_sys/vfs.cpp b/src/core/file_sys/vfs.cpp index 7b584de7f..a4a3236f4 100644 --- a/src/core/file_sys/vfs.cpp +++ b/src/core/file_sys/vfs.cpp @@ -384,6 +384,28 @@ bool VfsDirectory::DeleteSubdirectoryRecursive(std::string_view name) { return success; } +bool VfsDirectory::CleanSubdirectoryRecursive(std::string_view name) { + auto dir = GetSubdirectory(name); + if (dir == nullptr) { + return false; + } + + bool success = true; + for (const auto& file : dir->GetFiles()) { + if (!dir->DeleteFile(file->GetName())) { + success = false; + } + } + + for (const auto& sdir : dir->GetSubdirectories()) { + if (!dir->DeleteSubdirectoryRecursive(sdir->GetName())) { + success = false; + } + } + + return success; +} + bool VfsDirectory::Copy(std::string_view src, std::string_view dest) { const auto f1 = GetFile(src); auto f2 = CreateFile(dest); @@ -435,6 +457,10 @@ bool ReadOnlyVfsDirectory::DeleteSubdirectory(std::string_view name) { return false; } +bool ReadOnlyVfsDirectory::CleanSubdirectoryRecursive(std::string_view name) { + return false; +} + bool ReadOnlyVfsDirectory::DeleteFile(std::string_view name) { return false; } diff --git a/src/core/file_sys/vfs.h b/src/core/file_sys/vfs.h index 002f99d4e..6e1db36f1 100644 --- a/src/core/file_sys/vfs.h +++ b/src/core/file_sys/vfs.h @@ -245,12 +245,18 @@ public: // any failure. virtual std::shared_ptr<VfsDirectory> CreateDirectoryAbsolute(std::string_view path); - // Deletes the subdirectory with name and returns true on success. + // Deletes the subdirectory with the given name and returns true on success. virtual bool DeleteSubdirectory(std::string_view name) = 0; - // Deletes all subdirectories and files of subdirectory with name recirsively and then deletes - // the subdirectory. Returns true on success. + + // Deletes all subdirectories and files within the provided directory and then deletes + // the directory itself. Returns true on success. virtual bool DeleteSubdirectoryRecursive(std::string_view name); - // Returnes whether or not the file with name name was deleted successfully. + + // Deletes all subdirectories and files within the provided directory. + // Unlike DeleteSubdirectoryRecursive, this does not delete the provided directory. + virtual bool CleanSubdirectoryRecursive(std::string_view name); + + // Returns whether or not the file with name name was deleted successfully. virtual bool DeleteFile(std::string_view name) = 0; // Returns whether or not this directory was renamed to name. @@ -277,6 +283,7 @@ public: std::shared_ptr<VfsDirectory> CreateSubdirectory(std::string_view name) override; std::shared_ptr<VfsFile> CreateFile(std::string_view name) override; bool DeleteSubdirectory(std::string_view name) override; + bool CleanSubdirectoryRecursive(std::string_view name) override; bool DeleteFile(std::string_view name) override; bool Rename(std::string_view name) override; }; |