Просмотр исходного кода

am: Implement IStorageAccessor::Write.

bunnei 8 лет назад
Родитель
Сommit
2dcb98226b
1 измененных файлов с 17 добавлено и 1 удалено
  1. 17 1
      src/core/hle/service/am/am.cpp

+ 17 - 1
src/core/hle/service/am/am.cpp

@@ -397,7 +397,7 @@ public:
         : ServiceFramework("IStorageAccessor"), buffer(std::move(buffer)) {
         static const FunctionInfo functions[] = {
             {0, &IStorageAccessor::GetSize, "GetSize"},
-            {10, nullptr, "Write"},
+            {10, &IStorageAccessor::Write, "Write"},
             {11, &IStorageAccessor::Read, "Read"},
         };
         RegisterHandlers(functions);
@@ -415,6 +415,22 @@ private:
         NGLOG_DEBUG(Service_AM, "called");
     }
 
+    void Write(Kernel::HLERequestContext& ctx) {
+        IPC::RequestParser rp{ctx};
+
+        const u64 offset{rp.Pop<u64>()};
+        const std::vector<u8> data{ctx.ReadBuffer()};
+
+        ASSERT(offset + data.size() <= buffer.size());
+
+        std::memcpy(&buffer[offset], data.data(), data.size());
+
+        IPC::ResponseBuilder rb{rp.MakeBuilder(2, 0, 0)};
+        rb.Push(RESULT_SUCCESS);
+
+        NGLOG_DEBUG(Service_AM, "called, offset={}", offset);
+    }
+
     void Read(Kernel::HLERequestContext& ctx) {
         IPC::RequestParser rp{ctx};