mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-12 09:09:47 +12:00
[FS] Add FormatThisUserSaveData
This commit is contained in:
parent
a530350eda
commit
9ec2964695
3 changed files with 28 additions and 1 deletions
|
@ -43,6 +43,7 @@ class FSService {
|
||||||
void controlArchive(u32 messagePointer);
|
void controlArchive(u32 messagePointer);
|
||||||
void deleteFile(u32 messagePointer);
|
void deleteFile(u32 messagePointer);
|
||||||
void formatSaveData(u32 messagePointer);
|
void formatSaveData(u32 messagePointer);
|
||||||
|
void formatThisUserSaveData(u32 messagePointer);
|
||||||
void getFreeBytes(u32 messagePointer);
|
void getFreeBytes(u32 messagePointer);
|
||||||
void getFormatInfo(u32 messagePointer);
|
void getFormatInfo(u32 messagePointer);
|
||||||
void getPriority(u32 messagePointer);
|
void getPriority(u32 messagePointer);
|
||||||
|
|
|
@ -106,7 +106,7 @@ void SaveDataArchive::format(const FSPath& path, const ArchiveBase::FormatInfo&
|
||||||
fs::create_directories(saveDataPath);
|
fs::create_directories(saveDataPath);
|
||||||
|
|
||||||
// Write format info on disk
|
// Write format info on disk
|
||||||
IOFile file(formatInfoPath, "wb+");
|
IOFile file(formatInfoPath, "wb");
|
||||||
file.writeBytes(&info, sizeof(info));
|
file.writeBytes(&info, sizeof(info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ namespace FSCommands {
|
||||||
OpenArchive = 0x080C00C2,
|
OpenArchive = 0x080C00C2,
|
||||||
ControlArchive = 0x080D0144,
|
ControlArchive = 0x080D0144,
|
||||||
CloseArchive = 0x080E0080,
|
CloseArchive = 0x080E0080,
|
||||||
|
FormatThisUserSaveData = 0x080F0180,
|
||||||
GetFreeBytes = 0x08120080,
|
GetFreeBytes = 0x08120080,
|
||||||
IsSdmcDetected = 0x08170000,
|
IsSdmcDetected = 0x08170000,
|
||||||
GetFormatInfo = 0x084500C2,
|
GetFormatInfo = 0x084500C2,
|
||||||
|
@ -166,6 +167,7 @@ void FSService::handleSyncRequest(u32 messagePointer) {
|
||||||
case FSCommands::CloseArchive: closeArchive(messagePointer); break;
|
case FSCommands::CloseArchive: closeArchive(messagePointer); break;
|
||||||
case FSCommands::DeleteFile: deleteFile(messagePointer); break;
|
case FSCommands::DeleteFile: deleteFile(messagePointer); break;
|
||||||
case FSCommands::FormatSaveData: formatSaveData(messagePointer); break;
|
case FSCommands::FormatSaveData: formatSaveData(messagePointer); break;
|
||||||
|
case FSCommands::FormatThisUserSaveData: formatThisUserSaveData(messagePointer); break;
|
||||||
case FSCommands::GetFreeBytes: getFreeBytes(messagePointer); break;
|
case FSCommands::GetFreeBytes: getFreeBytes(messagePointer); break;
|
||||||
case FSCommands::GetFormatInfo: getFormatInfo(messagePointer); break;
|
case FSCommands::GetFormatInfo: getFormatInfo(messagePointer); break;
|
||||||
case FSCommands::GetPriority: getPriority(messagePointer); break;
|
case FSCommands::GetPriority: getPriority(messagePointer); break;
|
||||||
|
@ -427,6 +429,8 @@ void FSService::getFormatInfo(u32 messagePointer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FSService::formatSaveData(u32 messagePointer) {
|
void FSService::formatSaveData(u32 messagePointer) {
|
||||||
|
log("FS::FormatSaveData\n");
|
||||||
|
|
||||||
const u32 archiveID = mem.read32(messagePointer + 4);
|
const u32 archiveID = mem.read32(messagePointer + 4);
|
||||||
if (archiveID != ArchiveID::SaveData)
|
if (archiveID != ArchiveID::SaveData)
|
||||||
Helpers::panic("FS::FormatSaveData: Archive is not SaveData");
|
Helpers::panic("FS::FormatSaveData: Archive is not SaveData");
|
||||||
|
@ -461,6 +465,28 @@ void FSService::formatSaveData(u32 messagePointer) {
|
||||||
mem.write32(messagePointer + 4, ResultCode::Success);
|
mem.write32(messagePointer + 4, ResultCode::Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FSService::formatThisUserSaveData(u32 messagePointer) {
|
||||||
|
log("FS::FormatThisUserSaveData\n");
|
||||||
|
|
||||||
|
const u32 blockSize = mem.read32(messagePointer + 4);
|
||||||
|
const u32 directoryNum = mem.read32(messagePointer + 8); // Max number of directories
|
||||||
|
const u32 fileNum = mem.read32(messagePointer + 12); // Max number of files
|
||||||
|
const u32 directoryBucketNum = mem.read32(messagePointer + 16); // Not sure what a directory bucket is...?
|
||||||
|
const u32 fileBucketNum = mem.read32(messagePointer + 20); // Same here
|
||||||
|
const bool duplicateData = mem.read8(messagePointer + 24) != 0;
|
||||||
|
|
||||||
|
ArchiveBase::FormatInfo info {
|
||||||
|
.size = blockSize * 0x200,
|
||||||
|
.numOfDirectories = directoryNum,
|
||||||
|
.numOfFiles = fileNum,
|
||||||
|
.duplicateData = duplicateData
|
||||||
|
};
|
||||||
|
FSPath emptyPath;
|
||||||
|
|
||||||
|
mem.write32(messagePointer, IPC::responseHeader(0x080F, 1, 0));
|
||||||
|
saveData.format(emptyPath, info);
|
||||||
|
}
|
||||||
|
|
||||||
void FSService::controlArchive(u32 messagePointer) {
|
void FSService::controlArchive(u32 messagePointer) {
|
||||||
const Handle archiveHandle = mem.read64(messagePointer + 4);
|
const Handle archiveHandle = mem.read64(messagePointer + 4);
|
||||||
const u32 action = mem.read32(messagePointer + 12);
|
const u32 action = mem.read32(messagePointer + 12);
|
||||||
|
|
Loading…
Add table
Reference in a new issue