mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Switch idList to use structs in savedata.
This commit is contained in:
parent
73acbe556d
commit
6eca664c7c
2 changed files with 38 additions and 22 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue