diff options
| -rw-r--r-- | src/core/hle/service/am/am.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/applets.cpp | 24 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/applets.h | 24 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/error.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/general_backend.cpp | 14 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/profile_select.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/software_keyboard.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/web_browser.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/fsp_srv.cpp | 16 | 
9 files changed, 52 insertions, 50 deletions
| diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index c1550013a..cc978713b 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp @@ -847,7 +847,7 @@ private:          LOG_DEBUG(Service_AM, "called");          IPC::RequestParser rp{ctx}; -        applet->GetBroker().PushNormalDataFromGame(*rp.PopIpcInterface<IStorage>()); +        applet->GetBroker().PushNormalDataFromGame(rp.PopIpcInterface<IStorage>());          IPC::ResponseBuilder rb{ctx, 2};          rb.Push(RESULT_SUCCESS); @@ -867,14 +867,14 @@ private:          IPC::ResponseBuilder rb{ctx, 2, 0, 1};          rb.Push(RESULT_SUCCESS); -        rb.PushIpcInterface<IStorage>(std::move(*storage)); +        rb.PushIpcInterface<IStorage>(std::move(storage));      }      void PushInteractiveInData(Kernel::HLERequestContext& ctx) {          LOG_DEBUG(Service_AM, "called");          IPC::RequestParser rp{ctx}; -        applet->GetBroker().PushInteractiveDataFromGame(*rp.PopIpcInterface<IStorage>()); +        applet->GetBroker().PushInteractiveDataFromGame(rp.PopIpcInterface<IStorage>());          ASSERT(applet->IsInitialized());          applet->ExecuteInteractive(); @@ -898,7 +898,7 @@ private:          IPC::ResponseBuilder rb{ctx, 2, 0, 1};          rb.Push(RESULT_SUCCESS); -        rb.PushIpcInterface<IStorage>(std::move(*storage)); +        rb.PushIpcInterface<IStorage>(std::move(storage));      }      void GetPopOutDataEvent(Kernel::HLERequestContext& ctx) { diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp index 3e97ba218..c3261f3e6 100644 --- a/src/core/hle/service/am/applets/applets.cpp +++ b/src/core/hle/service/am/applets/applets.cpp @@ -50,7 +50,7 @@ AppletDataBroker::RawChannelData AppletDataBroker::PeekDataToAppletForDebug() co      return {std::move(out_normal), std::move(out_interactive)};  } -std::unique_ptr<IStorage> AppletDataBroker::PopNormalDataToGame() { +std::shared_ptr<IStorage> AppletDataBroker::PopNormalDataToGame() {      if (out_channel.empty())          return nullptr; @@ -60,7 +60,7 @@ std::unique_ptr<IStorage> AppletDataBroker::PopNormalDataToGame() {      return out;  } -std::unique_ptr<IStorage> AppletDataBroker::PopNormalDataToApplet() { +std::shared_ptr<IStorage> AppletDataBroker::PopNormalDataToApplet() {      if (in_channel.empty())          return nullptr; @@ -69,7 +69,7 @@ std::unique_ptr<IStorage> AppletDataBroker::PopNormalDataToApplet() {      return out;  } -std::unique_ptr<IStorage> AppletDataBroker::PopInteractiveDataToGame() { +std::shared_ptr<IStorage> AppletDataBroker::PopInteractiveDataToGame() {      if (out_interactive_channel.empty())          return nullptr; @@ -79,7 +79,7 @@ std::unique_ptr<IStorage> AppletDataBroker::PopInteractiveDataToGame() {      return out;  } -std::unique_ptr<IStorage> AppletDataBroker::PopInteractiveDataToApplet() { +std::shared_ptr<IStorage> AppletDataBroker::PopInteractiveDataToApplet() {      if (in_interactive_channel.empty())          return nullptr; @@ -88,21 +88,21 @@ std::unique_ptr<IStorage> AppletDataBroker::PopInteractiveDataToApplet() {      return out;  } -void AppletDataBroker::PushNormalDataFromGame(IStorage storage) { -    in_channel.push_back(std::make_unique<IStorage>(storage)); +void AppletDataBroker::PushNormalDataFromGame(std::shared_ptr<IStorage>&& storage) { +    in_channel.emplace_back(std::move(storage));  } -void AppletDataBroker::PushNormalDataFromApplet(IStorage storage) { -    out_channel.push_back(std::make_unique<IStorage>(storage)); +void AppletDataBroker::PushNormalDataFromApplet(std::shared_ptr<IStorage>&& storage) { +    out_channel.emplace_back(std::move(storage));      pop_out_data_event.writable->Signal();  } -void AppletDataBroker::PushInteractiveDataFromGame(IStorage storage) { -    in_interactive_channel.push_back(std::make_unique<IStorage>(storage)); +void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& storage) { +    in_interactive_channel.emplace_back(std::move(storage));  } -void AppletDataBroker::PushInteractiveDataFromApplet(IStorage storage) { -    out_interactive_channel.push_back(std::make_unique<IStorage>(storage)); +void AppletDataBroker::PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&& storage) { +    out_interactive_channel.emplace_back(std::move(storage));      pop_interactive_out_data_event.writable->Signal();  } diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h index 16e61fc6f..e75be86a2 100644 --- a/src/core/hle/service/am/applets/applets.h +++ b/src/core/hle/service/am/applets/applets.h @@ -72,17 +72,17 @@ public:      // Retrieves but does not pop the data sent to applet.      RawChannelData PeekDataToAppletForDebug() const; -    std::unique_ptr<IStorage> PopNormalDataToGame(); -    std::unique_ptr<IStorage> PopNormalDataToApplet(); +    std::shared_ptr<IStorage> PopNormalDataToGame(); +    std::shared_ptr<IStorage> PopNormalDataToApplet(); -    std::unique_ptr<IStorage> PopInteractiveDataToGame(); -    std::unique_ptr<IStorage> PopInteractiveDataToApplet(); +    std::shared_ptr<IStorage> PopInteractiveDataToGame(); +    std::shared_ptr<IStorage> PopInteractiveDataToApplet(); -    void PushNormalDataFromGame(IStorage storage); -    void PushNormalDataFromApplet(IStorage storage); +    void PushNormalDataFromGame(std::shared_ptr<IStorage>&& storage); +    void PushNormalDataFromApplet(std::shared_ptr<IStorage>&& storage); -    void PushInteractiveDataFromGame(IStorage storage); -    void PushInteractiveDataFromApplet(IStorage storage); +    void PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& storage); +    void PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&& storage);      void SignalStateChanged() const; @@ -94,16 +94,16 @@ private:      // Queues are named from applet's perspective      // PopNormalDataToApplet and PushNormalDataFromGame -    std::deque<std::unique_ptr<IStorage>> in_channel; +    std::deque<std::shared_ptr<IStorage>> in_channel;      // PopNormalDataToGame and PushNormalDataFromApplet -    std::deque<std::unique_ptr<IStorage>> out_channel; +    std::deque<std::shared_ptr<IStorage>> out_channel;      // PopInteractiveDataToApplet and PushInteractiveDataFromGame -    std::deque<std::unique_ptr<IStorage>> in_interactive_channel; +    std::deque<std::shared_ptr<IStorage>> in_interactive_channel;      // PopInteractiveDataToGame and PushInteractiveDataFromApplet -    std::deque<std::unique_ptr<IStorage>> out_interactive_channel; +    std::deque<std::shared_ptr<IStorage>> out_interactive_channel;      Kernel::EventPair state_changed_event; diff --git a/src/core/hle/service/am/applets/error.cpp b/src/core/hle/service/am/applets/error.cpp index e6c4e8b87..f12fd7f89 100644 --- a/src/core/hle/service/am/applets/error.cpp +++ b/src/core/hle/service/am/applets/error.cpp @@ -186,7 +186,7 @@ void Error::Execute() {  void Error::DisplayCompleted() {      complete = true; -    broker.PushNormalDataFromApplet(IStorage{std::vector<u8>{}}); +    broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::vector<u8>{}));      broker.SignalStateChanged();  } diff --git a/src/core/hle/service/am/applets/general_backend.cpp b/src/core/hle/service/am/applets/general_backend.cpp index fe8400a15..104501ac5 100644 --- a/src/core/hle/service/am/applets/general_backend.cpp +++ b/src/core/hle/service/am/applets/general_backend.cpp @@ -20,7 +20,7 @@ namespace Service::AM::Applets {  constexpr ResultCode ERROR_INVALID_PIN{ErrorModule::PCTL, 221};  static void LogCurrentStorage(AppletDataBroker& broker, std::string_view prefix) { -    std::unique_ptr<IStorage> storage = broker.PopNormalDataToApplet(); +    std::shared_ptr<IStorage> storage = broker.PopNormalDataToApplet();      for (; storage != nullptr; storage = broker.PopNormalDataToApplet()) {          const auto data = storage->GetData();          LOG_INFO(Service_AM, @@ -148,7 +148,7 @@ void Auth::AuthFinished(bool successful) {      std::vector<u8> out(sizeof(Return));      std::memcpy(out.data(), &return_, sizeof(Return)); -    broker.PushNormalDataFromApplet(IStorage{std::move(out)}); +    broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::move(out)));      broker.SignalStateChanged();  } @@ -198,7 +198,7 @@ void PhotoViewer::Execute() {  }  void PhotoViewer::ViewFinished() { -    broker.PushNormalDataFromApplet(IStorage{std::vector<u8>{}}); +    broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::vector<u8>{}));      broker.SignalStateChanged();  } @@ -234,8 +234,8 @@ void StubApplet::ExecuteInteractive() {      LOG_WARNING(Service_AM, "called (STUBBED)");      LogCurrentStorage(broker, "ExecuteInteractive"); -    broker.PushNormalDataFromApplet(IStorage{std::vector<u8>(0x1000)}); -    broker.PushInteractiveDataFromApplet(IStorage{std::vector<u8>(0x1000)}); +    broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::vector<u8>(0x1000))); +    broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(std::vector<u8>(0x1000)));      broker.SignalStateChanged();  } @@ -243,8 +243,8 @@ void StubApplet::Execute() {      LOG_WARNING(Service_AM, "called (STUBBED)");      LogCurrentStorage(broker, "Execute"); -    broker.PushNormalDataFromApplet(IStorage{std::vector<u8>(0x1000)}); -    broker.PushInteractiveDataFromApplet(IStorage{std::vector<u8>(0x1000)}); +    broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::vector<u8>(0x1000))); +    broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(std::vector<u8>(0x1000)));      broker.SignalStateChanged();  } diff --git a/src/core/hle/service/am/applets/profile_select.cpp b/src/core/hle/service/am/applets/profile_select.cpp index 91d00f72a..70cc23552 100644 --- a/src/core/hle/service/am/applets/profile_select.cpp +++ b/src/core/hle/service/am/applets/profile_select.cpp @@ -50,7 +50,7 @@ void ProfileSelect::ExecuteInteractive() {  void ProfileSelect::Execute() {      if (complete) { -        broker.PushNormalDataFromApplet(IStorage{std::move(final_data)}); +        broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::move(final_data)));          return;      } @@ -71,7 +71,7 @@ void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) {      final_data = std::vector<u8>(sizeof(UserSelectionOutput));      std::memcpy(final_data.data(), &output, final_data.size()); -    broker.PushNormalDataFromApplet(IStorage{std::move(final_data)}); +    broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::move(final_data)));      broker.SignalStateChanged();  } diff --git a/src/core/hle/service/am/applets/software_keyboard.cpp b/src/core/hle/service/am/applets/software_keyboard.cpp index 964c67202..54e63c138 100644 --- a/src/core/hle/service/am/applets/software_keyboard.cpp +++ b/src/core/hle/service/am/applets/software_keyboard.cpp @@ -102,7 +102,7 @@ void SoftwareKeyboard::ExecuteInteractive() {  void SoftwareKeyboard::Execute() {      if (complete) { -        broker.PushNormalDataFromApplet(IStorage{std::move(final_data)}); +        broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::move(final_data)));          broker.SignalStateChanged();          return;      } @@ -145,15 +145,15 @@ void SoftwareKeyboard::WriteText(std::optional<std::u16string> text) {          final_data = output_main;          if (complete) { -            broker.PushNormalDataFromApplet(IStorage{std::move(output_main)}); +            broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::move(output_main)));              broker.SignalStateChanged();          } else { -            broker.PushInteractiveDataFromApplet(IStorage{std::move(output_sub)}); +            broker.PushInteractiveDataFromApplet(std::make_shared<IStorage>(std::move(output_sub)));          }      } else {          output_main[0] = 1;          complete = true; -        broker.PushNormalDataFromApplet(IStorage{std::move(output_main)}); +        broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::move(output_main)));          broker.SignalStateChanged();      }  } diff --git a/src/core/hle/service/am/applets/web_browser.cpp b/src/core/hle/service/am/applets/web_browser.cpp index 05d6b3a19..12443c910 100644 --- a/src/core/hle/service/am/applets/web_browser.cpp +++ b/src/core/hle/service/am/applets/web_browser.cpp @@ -284,7 +284,7 @@ void WebBrowser::Finalize() {      std::vector<u8> data(sizeof(WebCommonReturnValue));      std::memcpy(data.data(), &out, sizeof(WebCommonReturnValue)); -    broker.PushNormalDataFromApplet(IStorage{std::move(data)}); +    broker.PushNormalDataFromApplet(std::make_shared<IStorage>(std::move(data)));      broker.SignalStateChanged();      if (!temporary_dir.empty() && FileUtil::IsDirectory(temporary_dir)) { diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp index 55d62fc5e..e6811d5b5 100644 --- a/src/core/hle/service/filesystem/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp_srv.cpp @@ -420,7 +420,7 @@ public:              return;          } -        IFile file(result.Unwrap()); +        auto file = std::make_shared<IFile>(result.Unwrap());          IPC::ResponseBuilder rb{ctx, 2, 0, 1};          rb.Push(RESULT_SUCCESS); @@ -445,7 +445,7 @@ public:              return;          } -        IDirectory directory(result.Unwrap()); +        auto directory = std::make_shared<IDirectory>(result.Unwrap());          IPC::ResponseBuilder rb{ctx, 2, 0, 1};          rb.Push(RESULT_SUCCESS); @@ -794,8 +794,8 @@ void FSP_SRV::OpenFileSystemWithPatch(Kernel::HLERequestContext& ctx) {  void FSP_SRV::OpenSdCardFileSystem(Kernel::HLERequestContext& ctx) {      LOG_DEBUG(Service_FS, "called"); -    IFileSystem filesystem(fsc.OpenSDMC().Unwrap(), -                           SizeGetter::FromStorageId(fsc, FileSys::StorageId::SdCard)); +    auto filesystem = std::make_shared<IFileSystem>( +        fsc.OpenSDMC().Unwrap(), SizeGetter::FromStorageId(fsc, FileSys::StorageId::SdCard));      IPC::ResponseBuilder rb{ctx, 2, 0, 1};      rb.Push(RESULT_SUCCESS); @@ -846,7 +846,8 @@ void FSP_SRV::OpenSaveDataFileSystem(Kernel::HLERequestContext& ctx) {          id = FileSys::StorageId::NandSystem;      } -    IFileSystem filesystem(std::move(dir.Unwrap()), SizeGetter::FromStorageId(fsc, id)); +    auto filesystem = +        std::make_shared<IFileSystem>(std::move(dir.Unwrap()), SizeGetter::FromStorageId(fsc, id));      IPC::ResponseBuilder rb{ctx, 2, 0, 1};      rb.Push(RESULT_SUCCESS); @@ -898,7 +899,7 @@ void FSP_SRV::OpenDataStorageByCurrentProcess(Kernel::HLERequestContext& ctx) {          return;      } -    IStorage storage(std::move(romfs.Unwrap())); +    auto storage = std::make_shared<IStorage>(std::move(romfs.Unwrap()));      IPC::ResponseBuilder rb{ctx, 2, 0, 1};      rb.Push(RESULT_SUCCESS); @@ -937,7 +938,8 @@ void FSP_SRV::OpenDataStorageByDataId(Kernel::HLERequestContext& ctx) {      FileSys::PatchManager pm{title_id}; -    IStorage storage(pm.PatchRomFS(std::move(data.Unwrap()), 0, FileSys::ContentRecordType::Data)); +    auto storage = std::make_shared<IStorage>( +        pm.PatchRomFS(std::move(data.Unwrap()), 0, FileSys::ContentRecordType::Data));      IPC::ResponseBuilder rb{ctx, 2, 0, 1};      rb.Push(RESULT_SUCCESS); | 
