diff --git a/nx/include/switch/runtime/devices/fs_dev.h b/nx/include/switch/runtime/devices/fs_dev.h index 8b9041c0..84e0d394 100644 --- a/nx/include/switch/runtime/devices/fs_dev.h +++ b/nx/include/switch/runtime/devices/fs_dev.h @@ -39,6 +39,14 @@ Result fsdevMountBcatSaveData(const char *name, u64 application_id); /// Mounts the specified DeviceSaveData. Result fsdevMountDeviceSaveData(const char *name, u64 application_id); +/// Mounts the TemporaryStorage for the current process. +/// Only available on [3.0.0+]. +Result fsdevMountTemporaryStorage(const char *name); + +/// Mounts the specified CacheStorage. +/// Only available on [3.0.0+]. +Result fsdevMountCacheStorage(const char *name, u64 application_id, u16 save_data_index); + /// Mounts the specified SystemSaveData. Result fsdevMountSystemSaveData(const char *name, FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid); diff --git a/nx/include/switch/services/fs.h b/nx/include/switch/services/fs.h index 49cf1199..4f750887 100644 --- a/nx/include/switch/services/fs.h +++ b/nx/include/switch/services/fs.h @@ -378,6 +378,15 @@ Result fsOpen_BcatSaveData(FsFileSystem* out, u64 application_id); /// See \ref FsSaveDataAttribute for application_id. Result fsOpen_DeviceSaveData(FsFileSystem* out, u64 application_id); +/// Wrapper for fsOpenSaveDataFileSystem, for opening TemporaryStorage. +/// Only available on [3.0.0+]. +Result fsOpen_TemporaryStorage(FsFileSystem* out); + +/// Wrapper for fsOpenSaveDataFileSystem, for opening CacheStorage. +/// Only available on [3.0.0+]. +/// See \ref FsSaveDataAttribute for application_id. +Result fsOpen_CacheStorage(FsFileSystem* out, u64 application_id, u16 save_data_index); + /// Wrapper for fsOpenSaveDataFileSystemBySystemSaveDataId, for opening SystemSaveData. /// WARNING: You can brick when writing to SystemSaveData, if the data is corrupted etc. Result fsOpen_SystemSaveData(FsFileSystem* out, FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid); diff --git a/nx/source/runtime/devices/fs_dev.c b/nx/source/runtime/devices/fs_dev.c index 1db2bd6a..619ab9ce 100644 --- a/nx/source/runtime/devices/fs_dev.c +++ b/nx/source/runtime/devices/fs_dev.c @@ -491,6 +491,32 @@ Result fsdevMountDeviceSaveData(const char *name, u64 application_id) return rc; } +Result fsdevMountTemporaryStorage(const char *name) +{ + FsFileSystem fs; + Result rc = fsOpen_TemporaryStorage(&fs); + if(R_SUCCEEDED(rc)) + { + int ret = fsdevMountDevice(name, fs); + if(ret==-1) + rc = MAKERESULT(Module_Libnx, LibnxError_OutOfMemory); + } + return rc; +} + +Result fsdevMountCacheStorage(const char *name, u64 application_id, u16 save_data_index) +{ + FsFileSystem fs; + Result rc = fsOpen_CacheStorage(&fs, application_id, save_data_index); + if(R_SUCCEEDED(rc)) + { + int ret = fsdevMountDevice(name, fs); + if(ret==-1) + rc = MAKERESULT(Module_Libnx, LibnxError_OutOfMemory); + } + return rc; +} + Result fsdevMountSystemSaveData(const char *name, FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid) { FsFileSystem fs; diff --git a/nx/source/services/fs.c b/nx/source/services/fs.c index 5d84a189..96c28b34 100644 --- a/nx/source/services/fs.c +++ b/nx/source/services/fs.c @@ -483,10 +483,6 @@ Result fsCreate_SystemSaveData(FsSaveDataSpaceId save_data_space_id, u64 system_ } // Wrapper(s) for fsOpenSaveDataFileSystem. -static Result _fsOpen_SaveDataFs(FsFileSystem* out, FsSaveDataAttribute *attr) { - return fsOpenSaveDataFileSystem(out, FsSaveDataSpaceId_User, attr); -} - Result fsOpen_SaveData(FsFileSystem* out, u64 application_id, AccountUid uid) { FsSaveDataAttribute attr; @@ -495,7 +491,7 @@ Result fsOpen_SaveData(FsFileSystem* out, u64 application_id, AccountUid uid) { attr.uid = uid; attr.save_data_type = FsSaveDataType_Account; - return _fsOpen_SaveDataFs(out, &attr); + return fsOpenSaveDataFileSystem(out, FsSaveDataSpaceId_User, &attr); } Result fsOpen_BcatSaveData(FsFileSystem* out, u64 application_id) { @@ -505,7 +501,7 @@ Result fsOpen_BcatSaveData(FsFileSystem* out, u64 application_id) { attr.application_id = application_id; attr.save_data_type = FsSaveDataType_Bcat; - return _fsOpen_SaveDataFs(out, &attr); + return fsOpenSaveDataFileSystem(out, FsSaveDataSpaceId_User, &attr); } Result fsOpen_DeviceSaveData(FsFileSystem* out, u64 application_id) { @@ -515,7 +511,33 @@ Result fsOpen_DeviceSaveData(FsFileSystem* out, u64 application_id) { attr.application_id = application_id; attr.save_data_type = FsSaveDataType_Device; - return _fsOpen_SaveDataFs(out, &attr); + return fsOpenSaveDataFileSystem(out, FsSaveDataSpaceId_User, &attr); +} + +Result fsOpen_TemporaryStorage(FsFileSystem* out) { + if (hosversionBefore(3,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + FsSaveDataAttribute attr; + + memset(&attr, 0, sizeof(attr)); + attr.save_data_type = FsSaveDataType_Temporary; + + return fsOpenSaveDataFileSystem(out, FsSaveDataType_Temporary, &attr); +} + +Result fsOpen_CacheStorage(FsFileSystem* out, u64 application_id, u16 save_data_index) { + if (hosversionBefore(3,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + FsSaveDataAttribute attr; + + memset(&attr, 0, sizeof(attr)); + attr.application_id = application_id; + attr.save_data_type = FsSaveDataType_Cache; + attr.save_data_index = save_data_index; + + return fsOpenSaveDataFileSystem(out, FsSaveDataSpaceId_User, &attr); } Result fsOpen_SystemSaveData(FsFileSystem* out, FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid) {