From 6eca664c7cde6cf54d4f335912a59cd447e66e71 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 23 Jun 2013 12:41:37 -0700 Subject: [PATCH] Switch idList to use structs in savedata. --- Core/Dialog/SavedataParam.cpp | 27 ++++++++++++--------------- Core/Dialog/SavedataParam.h | 33 ++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/Core/Dialog/SavedataParam.cpp b/Core/Dialog/SavedataParam.cpp index 8a302a934d..daebc3c701 100644 --- a/Core/Dialog/SavedataParam.cpp +++ b/Core/Dialog/SavedataParam.cpp @@ -795,15 +795,14 @@ bool SavedataParam::GetList(SceUtilitySavedataParam *param) return false; } - if (Memory::IsValidAddress(param->idListAddr)) + if (param->idList.Valid()) { - u32 outputBuffer = Memory::Read_U32(param->idListAddr + 8); - u32 maxFile = Memory::Read_U32(param->idListAddr + 0); + u32 maxFile = param->idList->maxCount; std::vector validDir; std::vector allDir = pspFileSystem.GetDirListing(savePath); - if (Memory::IsValidAddress(outputBuffer)) + if (param->idList.Valid()) { std::string searchString = GetGameName(param)+GetSaveName(param); for (size_t i = 0; i < allDir.size() && validDir.size() < maxFile; i++) @@ -815,24 +814,22 @@ bool SavedataParam::GetList(SceUtilitySavedataParam *param) } } + SceUtilitySavedataIdListEntry *entries = param->idList->entries; for (u32 i = 0; i < (u32)validDir.size(); i++) { - u32 baseAddr = outputBuffer + (i*72); - Memory::Write_U32(0x11FF,baseAddr + 0); // mode - Memory::Write_U64(0,baseAddr + 4); // TODO ctime - Memory::Write_U64(0,baseAddr + 12); // TODO unknow - Memory::Write_U64(0,baseAddr + 20); // TODO atime - Memory::Write_U64(0,baseAddr + 28); // TODO unknow - Memory::Write_U64(0,baseAddr + 36); // TODO mtime - Memory::Write_U64(0,baseAddr + 44); // TODO unknow + entries[i].st_mode = 0x11FF; + // TODO + memset(&entries[i].st_ctime, 0, sizeof(entries[i].st_ctime)); + memset(&entries[i].st_atime, 0, sizeof(entries[i].st_atime)); + memset(&entries[i].st_mtime, 0, sizeof(entries[i].st_mtime)); // folder name without gamename (max 20 u8) std::string outName = validDir[i].name.substr(GetGameName(param).size()); - Memory::Memset(baseAddr + 52,0,20); - Memory::Memcpy(baseAddr + 52, outName.c_str(), (u32)outName.size()); + memset(entries[i].name, 0, sizeof(entries[i].name)); + strncpy(entries[i].name, outName.c_str(), sizeof(entries[i].name)); } } // Save num of folder found - Memory::Write_U32((u32)validDir.size(), param->idListAddr + 4); + param->idList->resultCount = (u32)validDir.size(); } return true; } diff --git a/Core/Dialog/SavedataParam.h b/Core/Dialog/SavedataParam.h index 2d801b3d29..b3493769d9 100644 --- a/Core/Dialog/SavedataParam.h +++ b/Core/Dialog/SavedataParam.h @@ -107,6 +107,22 @@ struct PspUtilitySavedataSizeInfo { char overwriteString[8]; }; +struct SceUtilitySavedataIdListEntry +{ + int st_mode; + ScePspDateTime st_ctime; + ScePspDateTime st_atime; + ScePspDateTime st_mtime; + SceUtilitySavedataSaveName name; +}; + +struct SceUtilitySavedataIdListInfo +{ + int maxCount; + int resultCount; + PSPPointer entries; +}; + struct SceUtilitySavedataFileListEntry { int st_mode; @@ -130,27 +146,30 @@ struct SceUtilitySavedataFileListInfo PSPPointer systemEntries; }; -typedef struct SceUtilitySavedataMsFreeInfo { +struct SceUtilitySavedataMsFreeInfo +{ int clusterSize; int freeClusters; int freeSpaceKB; char freeSpaceStr[8]; -} SceUtilitySavedataMsFreeInfo; +}; -typedef struct SceUtilitySavedataUsedDataInfo { +struct SceUtilitySavedataUsedDataInfo +{ int usedClusters; int usedSpaceKB; char usedSpaceStr[8]; int usedSpace32KB; char usedSpace32Str[8]; -} SceUtilitySavedataUsedDataInfo; +}; -typedef struct SceUtilitySavedataMsDataInfo { +struct SceUtilitySavedataMsDataInfo +{ char gameName[13]; char pad[3]; SceUtilitySavedataSaveName saveName; SceUtilitySavedataUsedDataInfo info; -} SceUtilitySavedataMsDataInfo; +}; // Structure to hold the parameters for the sceUtilitySavedataInitStart function. struct SceUtilitySavedataParam @@ -200,7 +219,7 @@ struct SceUtilitySavedataParam int multiStatus; // Function 11 LIST - u32 idListAddr; + PSPPointer idList; // Function 12 FILES PSPPointer fileList;