summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar MerryMage2016-04-16 12:49:35 +0100
committerGravatar Subv2016-05-28 13:44:44 -0500
commit896e5009aeec0603ee3dd77e34462a503253b75f (patch)
tree5f86ff47ae7088a9a8ef979f93d33443bda9ea8e
parentCFG: Remove use of Memory::GetPointer (diff)
downloadyuzu-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.cpp21
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