mirror of
				https://github.com/yuzu-emu/yuzu.git
				synced 2025-11-04 03:13:44 +00:00 
			
		
		
		
	Merge pull request #389 from mailwl/fs-renamefile
Service/FS: implement IFileSystem::RenameFile
This commit is contained in:
		
						commit
						7495142688
					
				@ -67,10 +67,16 @@ ResultCode Disk_FileSystem::DeleteFile(const std::string& path) const {
 | 
			
		||||
    return RESULT_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ResultCode Disk_FileSystem::RenameFile(const Path& src_path, const Path& dest_path) const {
 | 
			
		||||
    LOG_WARNING(Service_FS, "(STUBBED) called");
 | 
			
		||||
ResultCode Disk_FileSystem::RenameFile(const std::string& src_path,
 | 
			
		||||
                                       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
 | 
			
		||||
    return ResultCode(-1);
 | 
			
		||||
    return FileUtil::Rename(full_src_path, full_dest_path) ? RESULT_SUCCESS : ResultCode(-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ResultCode Disk_FileSystem::DeleteDirectory(const Path& path) const {
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ public:
 | 
			
		||||
    ResultVal<std::unique_ptr<StorageBackend>> OpenFile(const std::string& path,
 | 
			
		||||
                                                        Mode mode) 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 DeleteDirectoryRecursively(const Path& path) 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
 | 
			
		||||
     * @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
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,8 @@ ResultCode RomFS_FileSystem::DeleteFile(const std::string& path) const {
 | 
			
		||||
    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).",
 | 
			
		||||
                 GetName().c_str());
 | 
			
		||||
    // TODO(wwylele): Use correct error code
 | 
			
		||||
 | 
			
		||||
@ -32,7 +32,7 @@ public:
 | 
			
		||||
    ResultVal<std::unique_ptr<StorageBackend>> OpenFile(const std::string& path,
 | 
			
		||||
                                                        Mode mode) 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 DeleteDirectoryRecursively(const Path& path) const override;
 | 
			
		||||
    ResultCode CreateFile(const std::string& path, u64 size) const override;
 | 
			
		||||
 | 
			
		||||
@ -239,7 +239,7 @@ public:
 | 
			
		||||
            {2, &IFileSystem::CreateDirectory, "CreateDirectory"},
 | 
			
		||||
            {3, nullptr, "DeleteDirectory"},
 | 
			
		||||
            {4, nullptr, "DeleteDirectoryRecursively"},
 | 
			
		||||
            {5, nullptr, "RenameFile"},
 | 
			
		||||
            {5, &IFileSystem::RenameFile, "RenameFile"},
 | 
			
		||||
            {6, nullptr, "RenameDirectory"},
 | 
			
		||||
            {7, &IFileSystem::GetEntryType, "GetEntryType"},
 | 
			
		||||
            {8, &IFileSystem::OpenFile, "OpenFile"},
 | 
			
		||||
@ -300,6 +300,26 @@ public:
 | 
			
		||||
        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) {
 | 
			
		||||
        IPC::RequestParser rp{ctx};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user