Implement fsOpenCustomStorageFileSystem

This commit is contained in:
Alex Barney 2019-08-10 19:35:50 -05:00
parent 37fdcb5726
commit 629ffed93e
2 changed files with 48 additions and 0 deletions

View File

@ -179,6 +179,12 @@ typedef enum
FS_CONTENTSTORAGEID_SdCard = 2, FS_CONTENTSTORAGEID_SdCard = 2,
} FsContentStorageId; } FsContentStorageId;
typedef enum
{
FsCustomStorageId_NandUser = 0,
FsCustomStorageId_SdCard = 1,
} FsCustomStorageId;
typedef enum typedef enum
{ {
FsSaveDataSpaceId_NandSystem = 0, FsSaveDataSpaceId_NandSystem = 0,
@ -280,6 +286,7 @@ Result fsMountSaveData(FsFileSystem* out, u8 inval, FsSave *save);
Result fsMountSystemSaveData(FsFileSystem* out, u8 inval, FsSave *save); Result fsMountSystemSaveData(FsFileSystem* out, u8 inval, FsSave *save);
Result fsOpenSaveDataIterator(FsSaveDataIterator* out, s32 saveDataSpaceId); Result fsOpenSaveDataIterator(FsSaveDataIterator* out, s32 saveDataSpaceId);
Result fsOpenContentStorageFileSystem(FsFileSystem* out, FsContentStorageId content_storage_id); Result fsOpenContentStorageFileSystem(FsFileSystem* out, FsContentStorageId content_storage_id);
Result fsOpenCustomStorageFileSystem(FsFileSystem* out, FsCustomStorageId custom_storage_id);
Result fsOpenDataStorageByCurrentProcess(FsStorage* out); Result fsOpenDataStorageByCurrentProcess(FsStorage* out);
Result fsOpenDataStorageByDataId(FsStorage* out, u64 dataId, FsStorageId storageId); Result fsOpenDataStorageByDataId(FsStorage* out, u64 dataId, FsStorageId storageId);
Result fsOpenDeviceOperator(FsDeviceOperator* out); Result fsOpenDeviceOperator(FsDeviceOperator* out);

View File

@ -427,6 +427,47 @@ Result fsOpenContentStorageFileSystem(FsFileSystem* out, FsContentStorageId cont
return rc; return rc;
} }
Result fsOpenCustomStorageFileSystem(FsFileSystem* out, FsCustomStorageId custom_storage_id) {
if (hosversionBefore(7,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
u32 custom_storage_id;
} *raw;
raw = serviceIpcPrepareHeader(&g_fsSrv, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 130;
raw->custom_storage_id = custom_storage_id;
Result rc = serviceIpcDispatch(&g_fsSrv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
} *resp;
serviceIpcParse(&g_fsSrv, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
if (R_SUCCEEDED(rc)) {
serviceCreateSubservice(&out->s, &g_fsSrv, &r, 0);
}
}
return rc;
}
Result fsOpenDataStorageByCurrentProcess(FsStorage* out) { Result fsOpenDataStorageByCurrentProcess(FsStorage* out) {
IpcCommand c; IpcCommand c;
ipcInitialize(&c); ipcInitialize(&c);