mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-31 07:59:02 -05:00 
			
		
		
		
	service/fsp_srv: Implement CleanDirectoryRecursively
This is the same behavior-wise as DeleteDirectoryRecursively, with the
only difference being that it doesn't delete the top level directory in
the hierarchy, so given:
root_dir/
  - some_dir/
    - File.txt
  - OtherFile.txt
The end result is just:
root_dir/
			
			
This commit is contained in:
		| @@ -113,6 +113,18 @@ ResultCode VfsDirectoryServiceWrapper::DeleteDirectoryRecursively(const std::str | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
|  | ||||
| ResultCode VfsDirectoryServiceWrapper::CleanDirectoryRecursively(const std::string& path) const { | ||||
|     const std::string sanitized_path(FileUtil::SanitizePath(path)); | ||||
|     auto dir = GetDirectoryRelativeWrapped(backing, FileUtil::GetParentPath(sanitized_path)); | ||||
|  | ||||
|     if (!dir->CleanSubdirectoryRecursive(FileUtil::GetFilename(sanitized_path))) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|     } | ||||
|  | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
|  | ||||
| ResultCode VfsDirectoryServiceWrapper::RenameFile(const std::string& src_path_, | ||||
|                                                   const std::string& dest_path_) const { | ||||
|     std::string src_path(FileUtil::SanitizePath(src_path_)); | ||||
|   | ||||
| @@ -113,6 +113,18 @@ public: | ||||
|      */ | ||||
|     ResultCode DeleteDirectoryRecursively(const std::string& path) const; | ||||
|  | ||||
|     /** | ||||
|      * Cleans the specified directory. This is similar to DeleteDirectoryRecursively, | ||||
|      * in that it deletes all the contents of the specified directory, however, this | ||||
|      * function does *not* delete the directory itself. It only deletes everything | ||||
|      * within it. | ||||
|      * | ||||
|      * @param path Path relative to the archive. | ||||
|      * | ||||
|      * @return Result of the operation. | ||||
|      */ | ||||
|     ResultCode CleanDirectoryRecursively(const std::string& path) const; | ||||
|  | ||||
|     /** | ||||
|      * Rename a File specified by its path | ||||
|      * @param src_path Source path relative to the archive | ||||
|   | ||||
| @@ -291,7 +291,7 @@ public: | ||||
|             {10, &IFileSystem::Commit, "Commit"}, | ||||
|             {11, nullptr, "GetFreeSpaceSize"}, | ||||
|             {12, nullptr, "GetTotalSpaceSize"}, | ||||
|             {13, nullptr, "CleanDirectoryRecursively"}, | ||||
|             {13, &IFileSystem::CleanDirectoryRecursively, "CleanDirectoryRecursively"}, | ||||
|             {14, nullptr, "GetFileTimeStampRaw"}, | ||||
|             {15, nullptr, "QueryEntry"}, | ||||
|         }; | ||||
| @@ -361,6 +361,16 @@ public: | ||||
|         rb.Push(backend.DeleteDirectoryRecursively(name)); | ||||
|     } | ||||
|  | ||||
|     void CleanDirectoryRecursively(Kernel::HLERequestContext& ctx) { | ||||
|         const auto file_buffer = ctx.ReadBuffer(); | ||||
|         const std::string name = Common::StringFromBuffer(file_buffer); | ||||
|  | ||||
|         LOG_DEBUG(Service_FS, "called. Directory: {}", name); | ||||
|  | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(backend.CleanDirectoryRecursively(name)); | ||||
|     } | ||||
|  | ||||
|     void RenameFile(Kernel::HLERequestContext& ctx) { | ||||
|         IPC::RequestParser rp{ctx}; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Lioncash
					Lioncash