Added mounting for SystemSaveData.

This commit is contained in:
yellows8 2018-03-22 22:56:38 -04:00
parent 51293c7fb0
commit bf216aa667
2 changed files with 57 additions and 0 deletions

View File

@ -17,6 +17,9 @@
/// For use with fsMountSaveData().
#define FS_MOUNTSAVEDATA_INVAL_DEFAULT 0x1
/// For use with fsMountSystemSaveData().
#define FS_MOUNTSYSTEMSAVEDATA_INVAL_DEFAULT 0x0
/// For use with FsSave.
#define FS_SAVEDATA_CURRENT_TITLEID 0
@ -96,6 +99,7 @@ Service* fsGetServiceSession(void);
Result fsMountSdcard(FsFileSystem* out);
Result fsMountSaveData(FsFileSystem* out, u8 inval, FsSave *save);
Result fsMountSystemSaveData(FsFileSystem* out, u8 inval, FsSave *save);
Result fsOpenDataStorageByCurrentProcess(FsStorage* out);
// todo: Rest of commands here
@ -105,6 +109,10 @@ Result fsOpenDataStorageByCurrentProcess(FsStorage* out);
/// See FsSave for titleID and userID.
Result fsMount_SaveData(FsFileSystem* out, u64 titleID, u128 userID);
/// Wrapper for fsMountSystemSaveData.
/// WARNING: You can brick when writing to SystemSaveData, if the data is corrupted etc.
Result fsMount_SystemSaveData(FsFileSystem* out, u64 saveID);
// IFileSystem
Result fsFsCreateFile(FsFileSystem* fs, const char* path, size_t size, int flags);
Result fsFsDeleteFile(FsFileSystem* fs, const char* path);

View File

@ -138,6 +138,45 @@ Result fsMountSaveData(FsFileSystem* out, u8 inval, FsSave *save) {
return rc;
}
Result fsMountSystemSaveData(FsFileSystem* out, u8 inval, FsSave *save) {
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
u64 inval;//Actually u8.
FsSave save;
} PACKED *raw;
raw = ipcPrepareHeader(&c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 52;
raw->inval = (u64)inval;
memcpy(&raw->save, save, sizeof(FsSave));
Result rc = serviceIpcDispatch(&g_fsSrv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
ipcParse(&r);
struct {
u64 magic;
u64 result;
} *resp = r.Raw;
rc = resp->result;
if (R_SUCCEEDED(rc)) {
out->h = r.Handles[0];
}
}
return rc;
}
Result fsOpenDataStorageByCurrentProcess(FsStorage* out) {
IpcCommand c;
ipcInitialize(&c);
@ -185,6 +224,16 @@ Result fsMount_SaveData(FsFileSystem* out, u64 titleID, u128 userID) {
return fsMountSaveData(out, FS_MOUNTSAVEDATA_INVAL_DEFAULT, &save);
}
Result fsMount_SystemSaveData(FsFileSystem* out, u64 saveID) {
FsSave save;
memset(&save, 0, sizeof(save));
save.saveID = saveID;
save.ContentStorageId = FS_CONTENTSTORAGEID_NandSystem;
return fsMountSystemSaveData(out, FS_MOUNTSYSTEMSAVEDATA_INVAL_DEFAULT, &save);
}
// IFileSystem impl
Result fsFsCreateFile(FsFileSystem* fs, const char* path, size_t size, int flags) {
IpcCommand c;