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

file_sys: Fix nacp field cache_storage_max_index datatype

Leystryku 2 лет назад
Родитель
Сommit
4f387b0b74

+ 2 - 2
src/core/file_sys/control_metadata.h

@@ -64,8 +64,8 @@ struct RawNACP {
     u64_le cache_storage_size;
     u64_le cache_storage_journal_size;
     u64_le cache_storage_data_and_journal_max_size;
-    u64_le cache_storage_max_index;
-    INSERT_PADDING_BYTES(0xE70);
+    u16_le cache_storage_max_index;
+    INSERT_PADDING_BYTES(0xE76);
 };
 static_assert(sizeof(RawNACP) == 0x4000, "RawNACP has incorrect size.");
 

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

@@ -272,17 +272,14 @@ Result IApplicationFunctions::GetCacheStorageMax(Out<u32> out_cache_storage_inde
                                                  Out<u64> out_max_journal_size) {
     LOG_DEBUG(Service_AM, "called");
 
-    const auto title_id = m_applet->program_id;
-
     std::vector<u8> nacp;
-    const auto result = system.GetARPManager().GetControlProperty(&nacp, title_id);
+    R_TRY(system.GetARPManager().GetControlProperty(&nacp, m_applet->program_id));
 
-    if (R_SUCCEEDED(result)) {
-        const auto rawnacp = reinterpret_cast<FileSys::RawNACP*>(nacp.data());
+    FileSys::RawNACP raw_nacp{};
+    std::memcpy(&raw_nacp, nacp.data(), std::min(sizeof(raw_nacp), nacp.size()));
 
-        *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);
-    }
+    *out_cache_storage_index_max = static_cast<u32>(raw_nacp.cache_storage_max_index);
+    *out_max_journal_size = static_cast<u64>(raw_nacp.cache_storage_data_and_journal_max_size);
 
      R_SUCCEED();
 }