Przeglądaj źródła

am: Implement ILibraryAppletCreator::CreateStorage.

bunnei 8 lat temu
rodzic
commit
d73c22bf4d
2 zmienionych plików z 34 dodań i 21 usunięć
  1. 33 21
      src/core/hle/service/am/am.cpp
  2. 1 0
      src/core/hle/service/am/am.h

+ 33 - 21
src/core/hle/service/am/am.cpp

@@ -391,27 +391,6 @@ private:
     Kernel::SharedPtr<Kernel::Event> state_changed_event;
     Kernel::SharedPtr<Kernel::Event> state_changed_event;
 };
 };
 
 
-ILibraryAppletCreator::ILibraryAppletCreator() : ServiceFramework("ILibraryAppletCreator") {
-    static const FunctionInfo functions[] = {
-        {0, &ILibraryAppletCreator::CreateLibraryApplet, "CreateLibraryApplet"},
-        {1, nullptr, "TerminateAllLibraryApplets"},
-        {2, nullptr, "AreAnyLibraryAppletsLeft"},
-        {10, nullptr, "CreateStorage"},
-        {11, nullptr, "CreateTransferMemoryStorage"},
-        {12, nullptr, "CreateHandleStorage"},
-    };
-    RegisterHandlers(functions);
-}
-
-void ILibraryAppletCreator::CreateLibraryApplet(Kernel::HLERequestContext& ctx) {
-    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
-
-    rb.Push(RESULT_SUCCESS);
-    rb.PushIpcInterface<AM::ILibraryAppletAccessor>();
-
-    NGLOG_DEBUG(Service_AM, "called");
-}
-
 class IStorageAccessor final : public ServiceFramework<IStorageAccessor> {
 class IStorageAccessor final : public ServiceFramework<IStorageAccessor> {
 public:
 public:
     explicit IStorageAccessor(std::vector<u8> buffer)
     explicit IStorageAccessor(std::vector<u8> buffer)
@@ -479,6 +458,39 @@ private:
     }
     }
 };
 };
 
 
+ILibraryAppletCreator::ILibraryAppletCreator() : ServiceFramework("ILibraryAppletCreator") {
+    static const FunctionInfo functions[] = {
+        {0, &ILibraryAppletCreator::CreateLibraryApplet, "CreateLibraryApplet"},
+        {1, nullptr, "TerminateAllLibraryApplets"},
+        {2, nullptr, "AreAnyLibraryAppletsLeft"},
+        {10, &ILibraryAppletCreator::CreateStorage, "CreateStorage"},
+        {11, nullptr, "CreateTransferMemoryStorage"},
+        {12, nullptr, "CreateHandleStorage"},
+    };
+    RegisterHandlers(functions);
+}
+
+void ILibraryAppletCreator::CreateLibraryApplet(Kernel::HLERequestContext& ctx) {
+    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
+
+    rb.Push(RESULT_SUCCESS);
+    rb.PushIpcInterface<AM::ILibraryAppletAccessor>();
+
+    NGLOG_DEBUG(Service_AM, "called");
+}
+
+void ILibraryAppletCreator::CreateStorage(Kernel::HLERequestContext& ctx) {
+    IPC::RequestParser rp{ctx};
+    const u64 size{rp.Pop<u64>()};
+    std::vector<u8> buffer(size);
+
+    IPC::ResponseBuilder rb{rp.MakeBuilder(2, 0, 1)};
+    rb.Push(RESULT_SUCCESS);
+    rb.PushIpcInterface<AM::IStorage>(std::move(buffer));
+
+    NGLOG_DEBUG(Service_AM, "called, size={}", size);
+}
+
 IApplicationFunctions::IApplicationFunctions() : ServiceFramework("IApplicationFunctions") {
 IApplicationFunctions::IApplicationFunctions() : ServiceFramework("IApplicationFunctions") {
     static const FunctionInfo functions[] = {
     static const FunctionInfo functions[] = {
         {1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"},
         {1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"},

+ 1 - 0
src/core/hle/service/am/am.h

@@ -121,6 +121,7 @@ public:
 
 
 private:
 private:
     void CreateLibraryApplet(Kernel::HLERequestContext& ctx);
     void CreateLibraryApplet(Kernel::HLERequestContext& ctx);
+    void CreateStorage(Kernel::HLERequestContext& ctx);
 };
 };
 
 
 class IApplicationFunctions final : public ServiceFramework<IApplicationFunctions> {
 class IApplicationFunctions final : public ServiceFramework<IApplicationFunctions> {