diff options
| author | 2016-04-16 12:49:35 +0100 | |
|---|---|---|
| committer | 2016-05-28 13:44:44 -0500 | |
| commit | 896e5009aeec0603ee3dd77e34462a503253b75f (patch) | |
| tree | 5f86ff47ae7088a9a8ef979f93d33443bda9ea8e | |
| parent | CFG: Remove use of Memory::GetPointer (diff) | |
| download | yuzu-896e5009aeec0603ee3dd77e34462a503253b75f.tar.gz yuzu-896e5009aeec0603ee3dd77e34462a503253b75f.tar.xz yuzu-896e5009aeec0603ee3dd77e34462a503253b75f.zip | |
FS/Archive: Remove use of Memory::GetPointer
| -rw-r--r-- | src/core/hle/service/fs/archive.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/core/hle/service/fs/archive.cpp b/src/core/hle/service/fs/archive.cpp index cc51ede0c..a7ebfde25 100644 --- a/src/core/hle/service/fs/archive.cpp +++ b/src/core/hle/service/fs/archive.cpp | |||
| @@ -108,11 +108,13 @@ ResultVal<bool> File::SyncRequest() { | |||
| 108 | offset, length, backend->GetSize()); | 108 | offset, length, backend->GetSize()); |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | ResultVal<size_t> read = backend->Read(offset, length, Memory::GetPointer(address)); | 111 | std::vector<u8> data(length); |
| 112 | ResultVal<size_t> read = backend->Read(offset, data.size(), data.data()); | ||
| 112 | if (read.Failed()) { | 113 | if (read.Failed()) { |
| 113 | cmd_buff[1] = read.Code().raw; | 114 | cmd_buff[1] = read.Code().raw; |
| 114 | return read.Code(); | 115 | return read.Code(); |
| 115 | } | 116 | } |
| 117 | Memory::WriteBlock(address, data.data(), *read); | ||
| 116 | cmd_buff[2] = static_cast<u32>(*read); | 118 | cmd_buff[2] = static_cast<u32>(*read); |
| 117 | Memory::RasterizerFlushAndInvalidateRegion(Memory::VirtualToPhysicalAddress(address), length); | 119 | Memory::RasterizerFlushAndInvalidateRegion(Memory::VirtualToPhysicalAddress(address), length); |
| 118 | break; | 120 | break; |
| @@ -128,7 +130,9 @@ ResultVal<bool> File::SyncRequest() { | |||
| 128 | LOG_TRACE(Service_FS, "Write %s %s: offset=0x%llx length=%d address=0x%x, flush=0x%x", | 130 | LOG_TRACE(Service_FS, "Write %s %s: offset=0x%llx length=%d address=0x%x, flush=0x%x", |
| 129 | GetTypeName().c_str(), GetName().c_str(), offset, length, address, flush); | 131 | GetTypeName().c_str(), GetName().c_str(), offset, length, address, flush); |
| 130 | 132 | ||
| 131 | ResultVal<size_t> written = backend->Write(offset, length, flush != 0, Memory::GetPointer(address)); | 133 | std::vector<u8> data(length); |
| 134 | Memory::ReadBlock(address, data.data(), data.size()); | ||
| 135 | ResultVal<size_t> written = backend->Write(offset, data.size(), flush != 0, data.data()); | ||
| 132 | if (written.Failed()) { | 136 | if (written.Failed()) { |
| 133 | cmd_buff[1] = written.Code().raw; | 137 | cmd_buff[1] = written.Code().raw; |
| 134 | return written.Code(); | 138 | return written.Code(); |
| @@ -216,12 +220,14 @@ ResultVal<bool> Directory::SyncRequest() { | |||
| 216 | { | 220 | { |
| 217 | u32 count = cmd_buff[1]; | 221 | u32 count = cmd_buff[1]; |
| 218 | u32 address = cmd_buff[3]; | 222 | u32 address = cmd_buff[3]; |
| 219 | auto entries = reinterpret_cast<FileSys::Entry*>(Memory::GetPointer(address)); | 223 | std::vector<FileSys::Entry> entries(count); |
| 220 | LOG_TRACE(Service_FS, "Read %s %s: count=%d", | 224 | LOG_TRACE(Service_FS, "Read %s %s: count=%d", |
| 221 | GetTypeName().c_str(), GetName().c_str(), count); | 225 | GetTypeName().c_str(), GetName().c_str(), count); |
| 222 | 226 | ||
| 223 | // Number of entries actually read | 227 | // Number of entries actually read |
| 224 | cmd_buff[2] = backend->Read(count, entries); | 228 | u32 read = backend->Read(entries.size(), entries.data()); |
| 229 | cmd_buff[2] = read; | ||
| 230 | Memory::WriteBlock(address, entries.data(), read * sizeof(FileSys::Entry)); | ||
| 225 | break; | 231 | break; |
| 226 | } | 232 | } |
| 227 | 233 | ||
| @@ -456,11 +462,12 @@ ResultCode CreateExtSaveData(MediaType media_type, u32 high, u32 low, VAddr icon | |||
| 456 | if (result.IsError()) | 462 | if (result.IsError()) |
| 457 | return result; | 463 | return result; |
| 458 | 464 | ||
| 459 | u8* smdh_icon = Memory::GetPointer(icon_buffer); | 465 | if (!Memory::IsValidVirtualAddress(icon_buffer)) |
| 460 | if (!smdh_icon) | ||
| 461 | return ResultCode(-1); // TODO(Subv): Find the right error code | 466 | return ResultCode(-1); // TODO(Subv): Find the right error code |
| 462 | 467 | ||
| 463 | ext_savedata->WriteIcon(path, smdh_icon, icon_size); | 468 | std::vector<u8> smdh_icon(icon_size); |
| 469 | Memory::ReadBlock(icon_buffer, smdh_icon.data(), smdh_icon.size()); | ||
| 470 | ext_savedata->WriteIcon(path, smdh_icon.data(), smdh_icon.size()); | ||
| 464 | return RESULT_SUCCESS; | 471 | return RESULT_SUCCESS; |
| 465 | } | 472 | } |
| 466 | 473 | ||