Jelajahi Sumber

service: Add proper GetCacheStorageMax implementation to IApplicationFunctions

Leystryku 2 tahun lalu
induk
melakukan
d93fdc8a6c

+ 15 - 5
src/core/hle/service/am/service/application_functions.cpp

@@ -17,6 +17,7 @@
 #include "core/hle/service/filesystem/save_data_controller.h"
 #include "core/hle/service/ns/ns.h"
 #include "core/hle/service/sm/sm.h"
+#include "core/hle/service/glue/glue_manager.h"
 
 namespace Service::AM {
 
@@ -267,14 +268,23 @@ Result IApplicationFunctions::GetSaveDataSizeMax(Out<u64> out_max_normal_size,
     R_SUCCEED();
 }
 
-Result IApplicationFunctions::GetCacheStorageMax(Out<u32> out_max_normal_size,
+Result IApplicationFunctions::GetCacheStorageMax(Out<u32> out_cache_storage_index_max,
                                                  Out<u64> out_max_journal_size) {
-    LOG_WARNING(Service_AM, "(STUBBED) called");
+    LOG_DEBUG(Service_AM, "called");
 
-    *out_max_normal_size = 0xFFFFFF;
-    *out_max_journal_size = 0xFFFFFF;
+    const auto title_id = m_applet->program_id;
 
-    R_SUCCEED();
+    std::vector<u8> nacp;
+    const auto result = system.GetARPManager().GetControlProperty(&nacp, title_id);
+
+    if (R_SUCCEEDED(result)) {
+        const auto rawnacp = reinterpret_cast<FileSys::RawNACP*>(nacp.data());
+
+        *out_cache_storage_index_max = static_cast<u32>(rawnacp->cache_storage_max_index);
+        *out_max_journal_size = static_cast<u64>(rawnacp->cache_storage_data_and_journal_max_size);
+    }
+
+     R_SUCCEED();
 }
 
 Result IApplicationFunctions::BeginBlockingHomeButtonShortAndLongPressed(s64 unused) {

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

@@ -40,7 +40,7 @@ private:
     Result CreateCacheStorage(Out<u32> out_target_media, Out<u64> out_required_size, u16 index,
                               u64 normal_size, u64 journal_size);
     Result GetSaveDataSizeMax(Out<u64> out_max_normal_size, Out<u64> out_max_journal_size);
-    Result GetCacheStorageMax(Out<u32> out_max_normal_size, Out<u64> out_max_journal_size);
+    Result GetCacheStorageMax(Out<u32> out_cache_storage_index_max, Out<u64> out_max_journal_size);
     Result BeginBlockingHomeButtonShortAndLongPressed(s64 unused);
     Result EndBlockingHomeButtonShortAndLongPressed();
     Result BeginBlockingHomeButton(s64 timeout_ns);

+ 1 - 1
src/core/hle/service/filesystem/fsp/fsp_srv.cpp

@@ -762,4 +762,4 @@ void FSP_SRV::OpenMultiCommitManager(HLERequestContext& ctx) {
     rb.PushIpcInterface<IMultiCommitManager>(std::make_shared<IMultiCommitManager>(system));
 }
 
-} // namespace Service::FileSystem
+} // namespace Service::FileSystem