mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Service/FS: implement IFileSystem::RenameFile
This commit is contained in:
		
							parent
							
								
									07dc0bbf3e
								
							
						
					
					
						commit
						a0179e5ca5
					
				| @ -67,10 +67,16 @@ ResultCode Disk_FileSystem::DeleteFile(const std::string& path) const { | |||||||
|     return RESULT_SUCCESS; |     return RESULT_SUCCESS; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ResultCode Disk_FileSystem::RenameFile(const Path& src_path, const Path& dest_path) const { | ResultCode Disk_FileSystem::RenameFile(const std::string& src_path, | ||||||
|     LOG_WARNING(Service_FS, "(STUBBED) called"); |                                        const std::string& dest_path) const { | ||||||
|  |     const std::string full_src_path = base_directory + src_path; | ||||||
|  |     const std::string full_dest_path = base_directory + dest_path; | ||||||
|  | 
 | ||||||
|  |     if (!FileUtil::Exists(full_src_path)) { | ||||||
|  |         return ERROR_PATH_NOT_FOUND; | ||||||
|  |     } | ||||||
|     // TODO(wwylele): Use correct error code
 |     // TODO(wwylele): Use correct error code
 | ||||||
|     return ResultCode(-1); |     return FileUtil::Rename(full_src_path, full_dest_path) ? RESULT_SUCCESS : ResultCode(-1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ResultCode Disk_FileSystem::DeleteDirectory(const Path& path) const { | ResultCode Disk_FileSystem::DeleteDirectory(const Path& path) const { | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ public: | |||||||
|     ResultVal<std::unique_ptr<StorageBackend>> OpenFile(const std::string& path, |     ResultVal<std::unique_ptr<StorageBackend>> OpenFile(const std::string& path, | ||||||
|                                                         Mode mode) const override; |                                                         Mode mode) const override; | ||||||
|     ResultCode DeleteFile(const std::string& path) const override; |     ResultCode DeleteFile(const std::string& path) const override; | ||||||
|     ResultCode RenameFile(const Path& src_path, const Path& dest_path) const override; |     ResultCode RenameFile(const std::string& src_path, const std::string& dest_path) const override; | ||||||
|     ResultCode DeleteDirectory(const Path& path) const override; |     ResultCode DeleteDirectory(const Path& path) const override; | ||||||
|     ResultCode DeleteDirectoryRecursively(const Path& path) const override; |     ResultCode DeleteDirectoryRecursively(const Path& path) const override; | ||||||
|     ResultCode CreateFile(const std::string& path, u64 size) const override; |     ResultCode CreateFile(const std::string& path, u64 size) const override; | ||||||
|  | |||||||
| @ -126,7 +126,8 @@ public: | |||||||
|      * @param dest_path Destination path relative to the archive |      * @param dest_path Destination path relative to the archive | ||||||
|      * @return Result of the operation |      * @return Result of the operation | ||||||
|      */ |      */ | ||||||
|     virtual ResultCode RenameFile(const Path& src_path, const Path& dest_path) const = 0; |     virtual ResultCode RenameFile(const std::string& src_path, | ||||||
|  |                                   const std::string& dest_path) const = 0; | ||||||
| 
 | 
 | ||||||
|     /**
 |     /**
 | ||||||
|      * Rename a Directory specified by its path |      * Rename a Directory specified by its path | ||||||
|  | |||||||
| @ -27,7 +27,8 @@ ResultCode RomFS_FileSystem::DeleteFile(const std::string& path) const { | |||||||
|     return ResultCode(-1); |     return ResultCode(-1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ResultCode RomFS_FileSystem::RenameFile(const Path& src_path, const Path& dest_path) const { | ResultCode RomFS_FileSystem::RenameFile(const std::string& src_path, | ||||||
|  |                                         const std::string& dest_path) const { | ||||||
|     LOG_CRITICAL(Service_FS, "Attempted to rename a file within an ROMFS archive (%s).", |     LOG_CRITICAL(Service_FS, "Attempted to rename a file within an ROMFS archive (%s).", | ||||||
|                  GetName().c_str()); |                  GetName().c_str()); | ||||||
|     // TODO(wwylele): Use correct error code
 |     // TODO(wwylele): Use correct error code
 | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ public: | |||||||
|     ResultVal<std::unique_ptr<StorageBackend>> OpenFile(const std::string& path, |     ResultVal<std::unique_ptr<StorageBackend>> OpenFile(const std::string& path, | ||||||
|                                                         Mode mode) const override; |                                                         Mode mode) const override; | ||||||
|     ResultCode DeleteFile(const std::string& path) const override; |     ResultCode DeleteFile(const std::string& path) const override; | ||||||
|     ResultCode RenameFile(const Path& src_path, const Path& dest_path) const override; |     ResultCode RenameFile(const std::string& src_path, const std::string& dest_path) const override; | ||||||
|     ResultCode DeleteDirectory(const Path& path) const override; |     ResultCode DeleteDirectory(const Path& path) const override; | ||||||
|     ResultCode DeleteDirectoryRecursively(const Path& path) const override; |     ResultCode DeleteDirectoryRecursively(const Path& path) const override; | ||||||
|     ResultCode CreateFile(const std::string& path, u64 size) const override; |     ResultCode CreateFile(const std::string& path, u64 size) const override; | ||||||
|  | |||||||
| @ -239,7 +239,7 @@ public: | |||||||
|             {2, &IFileSystem::CreateDirectory, "CreateDirectory"}, |             {2, &IFileSystem::CreateDirectory, "CreateDirectory"}, | ||||||
|             {3, nullptr, "DeleteDirectory"}, |             {3, nullptr, "DeleteDirectory"}, | ||||||
|             {4, nullptr, "DeleteDirectoryRecursively"}, |             {4, nullptr, "DeleteDirectoryRecursively"}, | ||||||
|             {5, nullptr, "RenameFile"}, |             {5, &IFileSystem::RenameFile, "RenameFile"}, | ||||||
|             {6, nullptr, "RenameDirectory"}, |             {6, nullptr, "RenameDirectory"}, | ||||||
|             {7, &IFileSystem::GetEntryType, "GetEntryType"}, |             {7, &IFileSystem::GetEntryType, "GetEntryType"}, | ||||||
|             {8, &IFileSystem::OpenFile, "OpenFile"}, |             {8, &IFileSystem::OpenFile, "OpenFile"}, | ||||||
| @ -300,6 +300,26 @@ public: | |||||||
|         rb.Push(backend->CreateDirectory(name)); |         rb.Push(backend->CreateDirectory(name)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     void RenameFile(Kernel::HLERequestContext& ctx) { | ||||||
|  |         IPC::RequestParser rp{ctx}; | ||||||
|  | 
 | ||||||
|  |         std::vector<u8> buffer; | ||||||
|  |         buffer.resize(ctx.BufferDescriptorX()[0].Size()); | ||||||
|  |         Memory::ReadBlock(ctx.BufferDescriptorX()[0].Address(), buffer.data(), buffer.size()); | ||||||
|  |         auto end = std::find(buffer.begin(), buffer.end(), '\0'); | ||||||
|  |         std::string src_name(buffer.begin(), end); | ||||||
|  | 
 | ||||||
|  |         buffer.resize(ctx.BufferDescriptorX()[1].Size()); | ||||||
|  |         Memory::ReadBlock(ctx.BufferDescriptorX()[1].Address(), buffer.data(), buffer.size()); | ||||||
|  |         end = std::find(buffer.begin(), buffer.end(), '\0'); | ||||||
|  |         std::string dst_name(buffer.begin(), end); | ||||||
|  | 
 | ||||||
|  |         LOG_DEBUG(Service_FS, "called file '%s' to file '%s'", src_name.c_str(), dst_name.c_str()); | ||||||
|  | 
 | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|  |         rb.Push(backend->RenameFile(src_name, dst_name)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     void OpenFile(Kernel::HLERequestContext& ctx) { |     void OpenFile(Kernel::HLERequestContext& ctx) { | ||||||
|         IPC::RequestParser rp{ctx}; |         IPC::RequestParser rp{ctx}; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 mailwl
						mailwl