Switch idList to use structs in savedata.

This commit is contained in:
Unknown W. Brackets 2013-06-23 12:41:37 -07:00
parent 73acbe556d
commit 6eca664c7c
2 changed files with 38 additions and 22 deletions

View file

@ -795,15 +795,14 @@ bool SavedataParam::GetList(SceUtilitySavedataParam *param)
return false; return false;
} }
if (Memory::IsValidAddress(param->idListAddr)) if (param->idList.Valid())
{ {
u32 outputBuffer = Memory::Read_U32(param->idListAddr + 8); u32 maxFile = param->idList->maxCount;
u32 maxFile = Memory::Read_U32(param->idListAddr + 0);
std::vector<PSPFileInfo> validDir; std::vector<PSPFileInfo> validDir;
std::vector<PSPFileInfo> allDir = pspFileSystem.GetDirListing(savePath); std::vector<PSPFileInfo> allDir = pspFileSystem.GetDirListing(savePath);
if (Memory::IsValidAddress(outputBuffer)) if (param->idList.Valid())
{ {
std::string searchString = GetGameName(param)+GetSaveName(param); std::string searchString = GetGameName(param)+GetSaveName(param);
for (size_t i = 0; i < allDir.size() && validDir.size() < maxFile; i++) 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++) for (u32 i = 0; i < (u32)validDir.size(); i++)
{ {
u32 baseAddr = outputBuffer + (i*72); entries[i].st_mode = 0x11FF;
Memory::Write_U32(0x11FF,baseAddr + 0); // mode // TODO
Memory::Write_U64(0,baseAddr + 4); // TODO ctime memset(&entries[i].st_ctime, 0, sizeof(entries[i].st_ctime));
Memory::Write_U64(0,baseAddr + 12); // TODO unknow memset(&entries[i].st_atime, 0, sizeof(entries[i].st_atime));
Memory::Write_U64(0,baseAddr + 20); // TODO atime memset(&entries[i].st_mtime, 0, sizeof(entries[i].st_mtime));
Memory::Write_U64(0,baseAddr + 28); // TODO unknow
Memory::Write_U64(0,baseAddr + 36); // TODO mtime
Memory::Write_U64(0,baseAddr + 44); // TODO unknow
// folder name without gamename (max 20 u8) // folder name without gamename (max 20 u8)
std::string outName = validDir[i].name.substr(GetGameName(param).size()); std::string outName = validDir[i].name.substr(GetGameName(param).size());
Memory::Memset(baseAddr + 52,0,20); memset(entries[i].name, 0, sizeof(entries[i].name));
Memory::Memcpy(baseAddr + 52, outName.c_str(), (u32)outName.size()); strncpy(entries[i].name, outName.c_str(), sizeof(entries[i].name));
} }
} }
// Save num of folder found // Save num of folder found
Memory::Write_U32((u32)validDir.size(), param->idListAddr + 4); param->idList->resultCount = (u32)validDir.size();
} }
return true; return true;
} }

View file

@ -107,6 +107,22 @@ struct PspUtilitySavedataSizeInfo {
char overwriteString[8]; 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<SceUtilitySavedataIdListEntry> entries;
};
struct SceUtilitySavedataFileListEntry struct SceUtilitySavedataFileListEntry
{ {
int st_mode; int st_mode;
@ -130,27 +146,30 @@ struct SceUtilitySavedataFileListInfo
PSPPointer<SceUtilitySavedataFileListEntry> systemEntries; PSPPointer<SceUtilitySavedataFileListEntry> systemEntries;
}; };
typedef struct SceUtilitySavedataMsFreeInfo { struct SceUtilitySavedataMsFreeInfo
{
int clusterSize; int clusterSize;
int freeClusters; int freeClusters;
int freeSpaceKB; int freeSpaceKB;
char freeSpaceStr[8]; char freeSpaceStr[8];
} SceUtilitySavedataMsFreeInfo; };
typedef struct SceUtilitySavedataUsedDataInfo { struct SceUtilitySavedataUsedDataInfo
{
int usedClusters; int usedClusters;
int usedSpaceKB; int usedSpaceKB;
char usedSpaceStr[8]; char usedSpaceStr[8];
int usedSpace32KB; int usedSpace32KB;
char usedSpace32Str[8]; char usedSpace32Str[8];
} SceUtilitySavedataUsedDataInfo; };
typedef struct SceUtilitySavedataMsDataInfo { struct SceUtilitySavedataMsDataInfo
{
char gameName[13]; char gameName[13];
char pad[3]; char pad[3];
SceUtilitySavedataSaveName saveName; SceUtilitySavedataSaveName saveName;
SceUtilitySavedataUsedDataInfo info; SceUtilitySavedataUsedDataInfo info;
} SceUtilitySavedataMsDataInfo; };
// Structure to hold the parameters for the sceUtilitySavedataInitStart function. // Structure to hold the parameters for the sceUtilitySavedataInitStart function.
struct SceUtilitySavedataParam struct SceUtilitySavedataParam
@ -200,7 +219,7 @@ struct SceUtilitySavedataParam
int multiStatus; int multiStatus;
// Function 11 LIST // Function 11 LIST
u32 idListAddr; PSPPointer<SceUtilitySavedataIdListInfo> idList;
// Function 12 FILES // Function 12 FILES
PSPPointer<SceUtilitySavedataFileListInfo> fileList; PSPPointer<SceUtilitySavedataFileListInfo> fileList;