nn_boss: Implement startIndex parameter usage in nn:boss:::GetDataList (#1162)

This commit is contained in:
Maschell 2024-04-08 19:51:30 +02:00 committed by GitHub
parent 9b30be0258
commit 7b635e7eb8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -9,7 +9,7 @@
#include "Cafe/CafeSystem.h" #include "Cafe/CafeSystem.h"
#include "Cafe/Filesystem/fsc.h" #include "Cafe/Filesystem/fsc.h"
namespace nn namespace nn
{ {
typedef uint32 Result; typedef uint32 Result;
namespace boss namespace boss
@ -782,9 +782,9 @@ bossBufferVector->buffer = (uint8*)bossRequest;
bossRequest->taskId = _thisptr->taskId.id; bossRequest->taskId = _thisptr->taskId.id;
bossRequest->titleId = _thisptr->titleId.u64; bossRequest->titleId = _thisptr->titleId.u64;
bossRequest->bool_parameter = isForegroundRun != 0; bossRequest->bool_parameter = isForegroundRun != 0;
__depr__IOS_Ioctlv(IOS_DEVICE_BOSS, IOSU_BOSS_REQUEST_CEMU, 1, 1, bossBufferVector); __depr__IOS_Ioctlv(IOS_DEVICE_BOSS, IOSU_BOSS_REQUEST_CEMU, 1, 1, bossBufferVector);
return 0; return 0;
} }
@ -796,9 +796,9 @@ bossBufferVector->buffer = (uint8*)bossRequest;
bossRequest->taskId = _thisptr->taskId.id; bossRequest->taskId = _thisptr->taskId.id;
bossRequest->titleId = _thisptr->titleId.u64; bossRequest->titleId = _thisptr->titleId.u64;
bossRequest->bool_parameter = executeImmediately != 0; bossRequest->bool_parameter = executeImmediately != 0;
__depr__IOS_Ioctlv(IOS_DEVICE_BOSS, IOSU_BOSS_REQUEST_CEMU, 1, 1, bossBufferVector); __depr__IOS_Ioctlv(IOS_DEVICE_BOSS, IOSU_BOSS_REQUEST_CEMU, 1, 1, bossBufferVector);
return 0; return 0;
} }
@ -809,9 +809,9 @@ bossBufferVector->buffer = (uint8*)bossRequest;
bossRequest->accountId = _thisptr->accountId; bossRequest->accountId = _thisptr->accountId;
bossRequest->taskId = _thisptr->taskId.id; bossRequest->taskId = _thisptr->taskId.id;
bossRequest->titleId = _thisptr->titleId.u64; bossRequest->titleId = _thisptr->titleId.u64;
__depr__IOS_Ioctlv(IOS_DEVICE_BOSS, IOSU_BOSS_REQUEST_CEMU, 1, 1, bossBufferVector); __depr__IOS_Ioctlv(IOS_DEVICE_BOSS, IOSU_BOSS_REQUEST_CEMU, 1, 1, bossBufferVector);
return 0; return 0;
} }
@ -1001,7 +1001,7 @@ bossBufferVector->buffer = (uint8*)bossRequest;
} }
}; };
static_assert(sizeof(PrivilegedTask) == 0x20); static_assert(sizeof(PrivilegedTask) == 0x20);
struct AlmightyTask : PrivilegedTask struct AlmightyTask : PrivilegedTask
{ {
struct VTableAlmightyTask : public VTablePrivilegedTask struct VTableAlmightyTask : public VTablePrivilegedTask
@ -1169,14 +1169,17 @@ bossBufferVector->buffer = (uint8*)bossRequest;
// initialize titleId of storage if not already done // initialize titleId of storage if not already done
nnBossStorage_prepareTitleId(storage); nnBossStorage_prepareTitleId(storage);
cemu_assert_debug(startIndex == 0); // non-zero index is todo if(startIndex >= FAD_ENTRY_MAX_COUNT) {
*outputEntryCount = 0;
return 0;
}
// load fad.db // load fad.db
BossStorageFadEntry* fadTable = nnBossStorageFad_getTable(storage); BossStorageFadEntry* fadTable = nnBossStorageFad_getTable(storage);
if (fadTable) if (fadTable)
{ {
sint32 validEntryCount = 0; sint32 validEntryCount = 0;
for (sint32 i = 0; i < FAD_ENTRY_MAX_COUNT; i++) for (sint32 i = startIndex; i < FAD_ENTRY_MAX_COUNT; i++)
{ {
if( fadTable[i].name[0] == '\0' ) if( fadTable[i].name[0] == '\0' )
continue; continue;
@ -1612,7 +1615,7 @@ bossBufferVector->buffer = (uint8*)bossRequest;
}; };
static_assert(sizeof(NsData) == 0x58); static_assert(sizeof(NsData) == 0x58);
} }
} }
void nnBoss_load() void nnBoss_load()
{ {
@ -1663,7 +1666,7 @@ void nnBoss_load()
cafeExportRegisterFunc(nn::boss::NbdlTaskSetting::dtor, "nn_boss", "__dt__Q3_2nn4boss15NbdlTaskSettingFv", LogType::NN_BOSS); cafeExportRegisterFunc(nn::boss::NbdlTaskSetting::dtor, "nn_boss", "__dt__Q3_2nn4boss15NbdlTaskSettingFv", LogType::NN_BOSS);
cafeExportRegisterFunc(nn::boss::NbdlTaskSetting::Initialize, "nn_boss", "Initialize__Q3_2nn4boss15NbdlTaskSettingFPCcLT1", LogType::NN_BOSS); cafeExportRegisterFunc(nn::boss::NbdlTaskSetting::Initialize, "nn_boss", "Initialize__Q3_2nn4boss15NbdlTaskSettingFPCcLT1", LogType::NN_BOSS);
cafeExportRegisterFunc(nn::boss::NbdlTaskSetting::SetFileName, "nn_boss", "SetFileName__Q3_2nn4boss15NbdlTaskSettingFPCc", LogType::NN_BOSS); cafeExportRegisterFunc(nn::boss::NbdlTaskSetting::SetFileName, "nn_boss", "SetFileName__Q3_2nn4boss15NbdlTaskSettingFPCc", LogType::NN_BOSS);
// PlayReportSetting // PlayReportSetting
nn::boss::PlayReportSetting::InitVTable(); nn::boss::PlayReportSetting::InitVTable();
cafeExportRegisterFunc(nn::boss::PlayReportSetting::ctor, "nn_boss", "__ct__Q3_2nn4boss17PlayReportSettingFv", LogType::NN_BOSS); cafeExportRegisterFunc(nn::boss::PlayReportSetting::ctor, "nn_boss", "__ct__Q3_2nn4boss17PlayReportSettingFv", LogType::NN_BOSS);