fs/fs_dev: Updated names to match wiki. Updated param names. Renamed FS_SAVEDATA_CURRENT_PROGRAMID to FS_SAVEDATA_CURRENT_APPLICATIONID. Updated field names in FsSaveDataAttribute, FsSaveDataExtraData, FsSaveDataCreationInfo, and FsSaveDataInfo. Updated names for the enum values for FsSaveDataSpaceId, FsSaveDataType, FsSaveDataFlags, and FsGameCardAttribute. Added FsSaveDataSpaceId_SdUser and FsSaveDataSpaceId_SafeMode. Added FsSaveDataType_SystemBcat. Added FsSaveDataRank. Fixed the name for FsGameCardPartition and added FsGameCardPartition_Logo. Renamed FsBisStorageId to FsBisPartitionId, updated the enum value names for it, and added FsBisPartitionId_SignedSystemPartitionOnSafeMode. Improved docs / minor other changes.

This commit is contained in:
yellows8 2019-11-16 16:07:10 -05:00
parent 8216043ea1
commit f181807215
No known key found for this signature in database
GPG Key ID: 0AF90DA3F1E60E43
4 changed files with 150 additions and 136 deletions

View File

@ -31,10 +31,10 @@ NX_CONSTEXPR FsDirectoryEntry* fsdevDirGetEntries(fsdev_dir_t *dir)
Result fsdevMountSdmc(void); Result fsdevMountSdmc(void);
/// Mounts the specified save data. /// Mounts the specified save data.
Result fsdevMountSaveData(const char *name, u64 program_id, AccountUid uid); Result fsdevMountSaveData(const char *name, u64 application_id, AccountUid uid);
/// Mounts the specified system save data. /// Mounts the specified system save data.
Result fsdevMountSystemSaveData(const char *name, FsSaveDataSpaceId saveDataSpaceId, u64 saveID, AccountUid uid); Result fsdevMountSystemSaveData(const char *name, FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid);
/// Mounts the input fs with the specified device name. fsdev will handle closing the fs when required, including when fsdevMountDevice() fails. /// Mounts the input fs with the specified device name. fsdev will handle closing the fs when required, including when fsdevMountDevice() fails.
/// Returns -1 when any errors occur. /// Returns -1 when any errors occur.

View File

@ -17,8 +17,8 @@
#define FS_MAX_PATH 0x301 #define FS_MAX_PATH 0x301
/// For use with FsSave. /// For use with \ref FsSaveDataAttribute.
#define FS_SAVEDATA_CURRENT_PROGRAMID 0 #define FS_SAVEDATA_CURRENT_APPLICATIONID 0
typedef struct { typedef struct {
u8 c[0x10]; u8 c[0x10];
@ -63,56 +63,56 @@ typedef struct {
/// SaveDataAttribute /// SaveDataAttribute
typedef struct { typedef struct {
u64 program_id; ///< ProgramId of the savedata to access when accessing other programs' savedata via SaveData, otherwise FS_SAVEDATA_CURRENT_PROGRAMID. u64 application_id; ///< ApplicationId of the savedata to access when accessing other programs' savedata via SaveData, otherwise FS_SAVEDATA_CURRENT_APPLICATIONID.
AccountUid uid; ///< \ref AccountUid for the user-specific savedata to access, otherwise 0 for common savedata. AccountUid uid; ///< \ref AccountUid for the user-specific savedata to access, otherwise 0 for common savedata.
u64 saveID; ///< saveID, 0 for SaveData. u64 system_save_data_id; ///< SystemSaveDataId, 0 for ::FsSaveDataType_Account.
u8 saveDataType; ///< See \ref FsSaveDataType. u8 save_data_type; ///< \ref FsSaveDataType
u8 rank; ///< Save data 'rank' or 'precedence'. 0 if this save data is considered the primary save data. 1 if it's considered the secondary save data. u8 save_data_rank; ///< \ref FsSaveDataRank
u16 index; ///< Save data index. u16 save_data_index; ///< SaveDataIndex
u32 pad_x24; ///< Padding. u32 pad_x24; ///< Padding.
u64 unk_x28; ///< 0 for SystemSaveData/SaveData. u64 unk_x28; ///< 0 for ::FsSaveDataType_System/::FsSaveDataType_Account.
u64 unk_x30; ///< 0 for SystemSaveData/SaveData. u64 unk_x30; ///< 0 for ::FsSaveDataType_System/::FsSaveDataType_Account.
u64 unk_x38; ///< 0 for SystemSaveData/SaveData. u64 unk_x38; ///< 0 for ::FsSaveDataType_System/::FsSaveDataType_Account.
} FsSaveDataAttribute; } FsSaveDataAttribute;
/// SaveDataExtraData /// SaveDataExtraData
typedef struct { typedef struct {
FsSaveDataAttribute attr; ///< \ref FsSaveDataAttribute FsSaveDataAttribute attr; ///< \ref FsSaveDataAttribute
u64 ownerId; ///< Id of the owner of this save data. 0 for SystemSaveData. u64 owner_id; ///< ProgramId of the owner of this save data. 0 for ::FsSaveDataType_System.
u64 timestamp; ///< POSIX timestamp. u64 timestamp; ///< POSIX timestamp.
u32 flags; ///< Save data flags. See \ref FsSaveDataFlags. u32 flags; ///< \ref FsSaveDataFlags
u32 unk_x54; ///< Normally 0. Possibly unused? u32 unk_x54; ///< Normally 0. Possibly unused?
s64 dataSize; ///< Usable save data size. s64 data_size; ///< Usable save data size.
s64 journalSize; ///< Journal size of the save data. s64 journal_size; ///< Journal size of the save data.
u64 commitId; ///< Id of the latest commit. u64 commit_id; ///< Id of the latest commit.
u8 unused[0x190]; ///< Uninitialized. u8 unused[0x190]; ///< Uninitialized.
} FsSaveDataExtraData; } FsSaveDataExtraData;
/// SaveDataCreationInfo /// SaveDataCreationInfo
typedef struct { typedef struct {
s64 size; ///< Size of the save data. s64 save_data_size; ///< Size of the save data.
s64 journalSize; ///< Journal size of the save data. s64 journal_size; ///< Journal size of the save data.
u64 blockSize; ///< Block size of the save data. u64 available_size; ///< AvailableSize
u64 ownerId; ///< ProgramId of the owner of this save data. 0 for SystemSaveData. u64 owner_id; ///< ProgramId of the owner of this save data. 0 for ::FsSaveDataType_System.
u32 flags; ///< Save data flags. See \ref FsSaveDataFlags. u32 flags; ///< \ref FsSaveDataFlags
u8 saveDataSpaceId; ///< See \ref FsSaveDataSpaceId. u8 save_data_space_id; ///< \ref FsSaveDataSpaceId
u8 unk; ///< 0 for SystemSaveData. u8 unk; ///< 0 for ::FsSaveDataType_System.
u8 padding[0x1A]; ///< Uninitialized for SystemSaveData. u8 padding[0x1a]; ///< Uninitialized for ::FsSaveDataType_System.
} FsSaveDataCreationInfo; } FsSaveDataCreationInfo;
/// SaveDataInfo /// SaveDataInfo
typedef struct { typedef struct {
u64 saveID_unk; u64 save_data_id; ///< SaveDataId
u8 saveDataSpaceId; ///< See \ref FsSaveDataSpaceId. u8 save_data_space_id; ///< \ref FsSaveDataSpaceId
u8 saveDataType; ///< See \ref FsSaveDataType. u8 save_data_type; ///< \ref FsSaveDataType
u8 pad[6]; ///< Padding. u8 pad[6]; ///< Padding.
AccountUid uid; ///< FsSave::userID AccountUid uid; ///< FsSave::userID
u64 saveID; ///< FsSaveDataAttribute::saveID u64 system_save_data_id; ///< FsSaveDataAttribute::system_save_data_id
u64 application_id; ///< ApplicationId for FsSaveDataType_SaveData. u64 application_id; ///< ApplicationId for ::FsSaveDataType_Account.
u64 size; ///< Raw saveimage size. u64 size; ///< Raw saveimage size.
u16 index; ///< Save data index. u16 save_data_index; ///< SaveDataIndex
u8 rank; ///< Save data 'rank' or 'precedence'. 0 if this save data is considered the primary save data. 1 if it's considered the secondary save data. u8 save_data_rank; ///< \ref FsSaveDataRank
u8 unk_x3b[0x25]; ///< Unknown. Usually zeros? u8 unk_x3b[0x25]; ///< Unknown. Usually zeros?
} FsSaveDataInfo; } FsSaveDataInfo;
typedef struct { typedef struct {
@ -172,43 +172,53 @@ typedef enum {
/// SaveDataSpaceId /// SaveDataSpaceId
typedef enum { typedef enum {
FsSaveDataSpaceId_System = 0, FsSaveDataSpaceId_System = 0, ///< System
FsSaveDataSpaceId_User = 1, FsSaveDataSpaceId_User = 1, ///< User
FsSaveDataSpaceId_SdCard = 2, FsSaveDataSpaceId_SdSystem = 2, ///< SdSystem
FsSaveDataSpaceId_TemporaryStorage = 3, ///< [3.0.0+] FsSaveDataSpaceId_Temporary = 3, ///< [3.0.0+] Temporary
FsSaveDataSpaceId_ProperSystem = 100, ///< [3.0.0+] FsSaveDataSpaceId_SdUser = 4, ///< [4.0.0+] SdUser
FsSaveDataSpaceId_ProperSystem = 100, ///< [3.0.0+] ProperSystem
FsSaveDataSpaceId_SafeMode = 101, ///< [3.0.0+] SafeMode
FsSaveDataSpaceId_All = -1, ///< Pseudo value for fsOpenSaveDataInfoReader(). FsSaveDataSpaceId_All = -1, ///< Pseudo value for fsOpenSaveDataInfoReader().
} FsSaveDataSpaceId; } FsSaveDataSpaceId;
/// SaveDataType /// SaveDataType
typedef enum { typedef enum {
FsSaveDataType_SystemSaveData = 0, FsSaveDataType_System = 0, ///< System
FsSaveDataType_SaveData = 1, FsSaveDataType_Account = 1, ///< Account
FsSaveDataType_BcatDeliveryCacheStorage = 2, FsSaveDataType_Bcat = 2, ///< Bcat
FsSaveDataType_DeviceSaveData = 3, FsSaveDataType_Device = 3, ///< Device
FsSaveDataType_TemporaryStorage = 4, ///< [3.0.0+] FsSaveDataType_Temporary = 4, ///< [3.0.0+] Temporary
FsSaveDataType_CacheStorage = 5, ///< [3.0.0+] FsSaveDataType_Cache = 5, ///< [3.0.0+] Cache
FsSaveDataType_SystemBcat = 6, ///< [4.0.0+] SystemBcat
} FsSaveDataType; } FsSaveDataType;
/// SaveDataRank
typedef enum {
FsSaveDataRank_Primary = 0, ///< Primary
FsSaveDataRank_Secondary = 1, ///< Secondary
} FsSaveDataRank;
/// SaveDataFlags /// SaveDataFlags
typedef enum { typedef enum {
FsSaveDataFlags_SurviveFactoryReset = BIT(0), FsSaveDataFlags_KeepAfterResettingSystemSaveData = BIT(0),
FsSaveDataFlags_SurviveFactoryResetForRefurbishment = BIT(1), FsSaveDataFlags_KeepAfterRefurbishment = BIT(1),
FsSaveDataFlags_SurviveFactoryResetWithoutUserSaveData = BIT(2), FsSaveDataFlags_KeepAfterResettingSystemSaveDataWithoutUserSaveData = BIT(2),
} FsSaveDataFlags; } FsSaveDataFlags;
typedef enum { typedef enum {
FsGameCardAttribute_AutoBoot = BIT(0), ///< Causes the cartridge to automatically start on bootup FsGameCardAttribute_AutoBootFlag = BIT(0), ///< Causes the cartridge to automatically start on bootup
FsGameCardAttribute_ForceError = BIT(1), ///< Causes NS to throw an error on attempt to load the cartridge FsGameCardAttribute_HistoryEraseFlag = BIT(1), ///< Causes NS to throw an error on attempt to load the cartridge
FsGameCardAttribute_Repair = BIT(2), ///< Indicates that this gamecard is a repair tool. FsGameCardAttribute_RepairToolFlag = BIT(2), ///< Indicates that this gamecard is a repair tool.
} FsGameCardAttribute; } FsGameCardAttribute;
typedef enum { typedef enum {
FsGameCardPartiton_Update = 0, FsGameCardPartition_Update = 0,
FsGameCardPartiton_Normal = 1, FsGameCardPartition_Normal = 1,
FsGameCardPartiton_Secure = 2, FsGameCardPartition_Secure = 2,
} FsGameCardPartiton; FsGameCardPartition_Logo = 3, ///< [4.0.0+]
} FsGameCardPartition;
typedef struct { typedef struct {
u32 value; u32 value;
@ -227,26 +237,28 @@ typedef enum {
FsOperationId_QueryRange, ///< Retrieves information on data for supported file/storage. FsOperationId_QueryRange, ///< Retrieves information on data for supported file/storage.
} FsOperationId; } FsOperationId;
/// BisPartitionId
typedef enum { typedef enum {
FsBisStorageId_Boot0 = 0, FsBisPartitionId_BootPartition1Root = 0,
FsBisStorageId_Boot1 = 10, FsBisPartitionId_BootPartition2Root = 10,
FsBisStorageId_UserDataRoot = 20, FsBisPartitionId_UserDataRoot = 20,
FsBisStorageId_BootConfigAndPackage2NormalMain = 21, FsBisPartitionId_BootConfigAndPackage2Part1 = 21,
FsBisStorageId_BootConfigAndPackage2NormalSub = 22, FsBisPartitionId_BootConfigAndPackage2Part2 = 22,
FsBisStorageId_BootConfigAndPackage2SafeMain = 23, FsBisPartitionId_BootConfigAndPackage2Part3 = 23,
FsBisStorageId_BootConfigAndPackage2SafeSub = 24, FsBisPartitionId_BootConfigAndPackage2Part4 = 24,
FsBisStorageId_BootConfigAndPackage2RepairMain = 25, FsBisPartitionId_BootConfigAndPackage2Part5 = 25,
FsBisStorageId_BootConfigAndPackage2RepairSub = 26, FsBisPartitionId_BootConfigAndPackage2Part6 = 26,
FsBisStorageId_CalibrationBinary = 27, FsBisPartitionId_CalibrationBinary = 27,
FsBisStorageId_CalibrationFile = 28, FsBisPartitionId_CalibrationFile = 28,
FsBisStorageId_SafeMode = 29, FsBisPartitionId_SafeMode = 29,
FsBisStorageId_User = 30, FsBisPartitionId_User = 30,
FsBisStorageId_System = 31, FsBisPartitionId_System = 31,
FsBisStorageId_SystemProperEncryption = 32, FsBisPartitionId_SystemProperEncryption = 32,
FsBisStorageId_SystemProperPartition = 33, FsBisPartitionId_SystemProperPartition = 33,
} FsBisStorageId; FsBisPartitionId_SignedSystemPartitionOnSafeMode = 34,
} FsBisPartitionId;
/// FileSystemType /// FileSystemType
typedef enum { typedef enum {
@ -263,6 +275,7 @@ typedef enum {
FsFileSystemQueryType_SetArchiveBit = 0, FsFileSystemQueryType_SetArchiveBit = 0,
} FsFileSystemQueryType; } FsFileSystemQueryType;
/// FsPriority
typedef enum { typedef enum {
FsPriority_Normal = 0, FsPriority_Normal = 0,
FsPriority_Realtime = 1, FsPriority_Realtime = 1,
@ -279,6 +292,7 @@ void fsExit(void);
/// Gets the Service object for the actual fsp-srv service session. /// Gets the Service object for the actual fsp-srv service session.
Service* fsGetServiceSession(void); Service* fsGetServiceSession(void);
/// [5.0.0+] Configures the \ref FsPriority of all filesystem commands issued within the current thread.
void fsSetPriority(FsPriority prio); void fsSetPriority(FsPriority prio);
/// Mount requested filesystem type from content file /// Mount requested filesystem type from content file
@ -286,29 +300,29 @@ Result fsOpenFileSystem(FsFileSystem* out, FsFileSystemType fsType, const char*
Result fsOpenFileSystemWithPatch(FsFileSystem* out, u64 id, FsFileSystemType fsType); ///< [2.0.0+], like OpenFileSystemWithId but without content path. Result fsOpenFileSystemWithPatch(FsFileSystem* out, u64 id, FsFileSystemType fsType); ///< [2.0.0+], like OpenFileSystemWithId but without content path.
Result fsOpenFileSystemWithId(FsFileSystem* out, u64 id, FsFileSystemType fsType, const char* contentPath); ///< works on all firmwares, id is ignored on [1.0.0] Result fsOpenFileSystemWithId(FsFileSystem* out, u64 id, FsFileSystemType fsType, const char* contentPath); ///< works on all firmwares, id is ignored on [1.0.0]
Result fsOpenBisFileSystem(FsFileSystem* out, FsBisStorageId partitionId, const char* string); Result fsOpenBisFileSystem(FsFileSystem* out, FsBisPartitionId partitionId, const char* string);
Result fsOpenBisStorage(FsStorage* out, FsBisStorageId partitionId); Result fsOpenBisStorage(FsStorage* out, FsBisPartitionId partitionId);
/// Do not call this directly, see fs_dev.h. /// Do not call this directly, see fs_dev.h.
Result fsOpenSdCardFileSystem(FsFileSystem* out); Result fsOpenSdCardFileSystem(FsFileSystem* out);
Result fsCreateSaveDataFileSystemBySystemSaveDataId(const FsSaveDataAttribute* attr, const FsSaveDataCreationInfo* creation_info); Result fsCreateSaveDataFileSystemBySystemSaveDataId(const FsSaveDataAttribute* attr, const FsSaveDataCreationInfo* creation_info);
Result fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId saveDataSpaceId, u64 saveID); /// [2.0.0+] Result fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId save_data_space_id, u64 saveID); /// [2.0.0+]
Result fsIsExFatSupported(bool* out); Result fsIsExFatSupported(bool* out);
Result fsOpenGameCardFileSystem(FsFileSystem* out, const FsGameCardHandle* handle, FsGameCardPartiton partition); Result fsOpenGameCardFileSystem(FsFileSystem* out, const FsGameCardHandle* handle, FsGameCardPartition partition);
Result fsExtendSaveDataFileSystem(FsSaveDataSpaceId saveDataSpaceId, u64 saveID, s64 dataSize, s64 journalSize); /// [3.0.0+] Result fsExtendSaveDataFileSystem(FsSaveDataSpaceId save_data_space_id, u64 saveID, s64 dataSize, s64 journalSize); /// [3.0.0+]
Result fsOpenSaveDataFileSystem(FsFileSystem* out, FsSaveDataSpaceId saveDataSpaceId, const FsSaveDataAttribute *attr); Result fsOpenSaveDataFileSystem(FsFileSystem* out, FsSaveDataSpaceId save_data_space_id, const FsSaveDataAttribute *attr);
Result fsOpenSaveDataFileSystemBySystemSaveDataId(FsFileSystem* out, FsSaveDataSpaceId saveDataSpaceId, const FsSaveDataAttribute *attr); Result fsOpenSaveDataFileSystemBySystemSaveDataId(FsFileSystem* out, FsSaveDataSpaceId save_data_space_id, const FsSaveDataAttribute *attr);
Result fsReadSaveDataFileSystemExtraDataBySaveDataSpaceId(void* buf, size_t len, FsSaveDataSpaceId saveDataSpaceId, u64 saveID); Result fsReadSaveDataFileSystemExtraDataBySaveDataSpaceId(void* buf, size_t len, FsSaveDataSpaceId save_data_space_id, u64 saveID);
Result fsReadSaveDataFileSystemExtraData(void* buf, size_t len, u64 saveID); Result fsReadSaveDataFileSystemExtraData(void* buf, size_t len, u64 saveID);
Result fsWriteSaveDataFileSystemExtraData(const void* buf, size_t len, FsSaveDataSpaceId saveDataSpaceId, u64 saveID); Result fsWriteSaveDataFileSystemExtraData(const void* buf, size_t len, FsSaveDataSpaceId save_data_space_id, u64 saveID);
Result fsOpenSaveDataInfoReader(FsSaveDataInfoReader* out, FsSaveDataSpaceId saveDataSpaceId); Result fsOpenSaveDataInfoReader(FsSaveDataInfoReader* out, FsSaveDataSpaceId save_data_space_id);
Result fsOpenContentStorageFileSystem(FsFileSystem* out, FsContentStorageId content_storage_id); Result fsOpenContentStorageFileSystem(FsFileSystem* out, FsContentStorageId content_storage_id);
Result fsOpenCustomStorageFileSystem(FsFileSystem* out, FsCustomStorageId custom_storage_id); /// [7.0.0+] Result fsOpenCustomStorageFileSystem(FsFileSystem* out, FsCustomStorageId custom_storage_id); /// [7.0.0+]
@ -331,16 +345,16 @@ Result fsSetGlobalAccessLogMode(u32 mode);
Result fsGetGlobalAccessLogMode(u32* out_mode); Result fsGetGlobalAccessLogMode(u32* out_mode);
// Wrapper(s) for fsCreateSaveDataFileSystemBySystemSaveDataId. // Wrapper(s) for fsCreateSaveDataFileSystemBySystemSaveDataId.
Result fsCreate_SystemSaveDataWithOwner(FsSaveDataSpaceId saveDataSpaceId, u64 saveID, AccountUid uid, u64 ownerId, u64 size, u64 journalSize, u32 flags); Result fsCreate_SystemSaveDataWithOwner(FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid, u64 owner_id, u64 size, u64 journal_size, u32 flags);
Result fsCreate_SystemSaveData(FsSaveDataSpaceId saveDataSpaceId, u64 saveID, u64 size, u64 journalSize, u32 flags); Result fsCreate_SystemSaveData(FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, u64 size, u64 journal_size, u32 flags);
/// Wrapper(s) for fsOpenSaveDataFileSystem. /// Wrapper(s) for fsOpenSaveDataFileSystem.
/// See FsSave for program_id and uid. /// See FsSave for program_id and uid.
Result fsOpen_SaveData(FsFileSystem* out, u64 program_id, AccountUid uid); Result fsOpen_SaveData(FsFileSystem* out, u64 application_id, AccountUid uid);
/// Wrapper for fsOpenSaveDataFileSystemBySystemSaveDataId. /// Wrapper for fsOpenSaveDataFileSystemBySystemSaveDataId.
/// WARNING: You can brick when writing to SystemSaveData, if the data is corrupted etc. /// WARNING: You can brick when writing to SystemSaveData, if the data is corrupted etc.
Result fsOpen_SystemSaveData(FsFileSystem* out, FsSaveDataSpaceId saveDataSpaceId, u64 saveID, AccountUid uid); Result fsOpen_SystemSaveData(FsFileSystem* out, FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid);
// IFileSystem // IFileSystem
Result fsFsCreateFile(FsFileSystem* fs, const char* path, u64 size, u32 option); Result fsFsCreateFile(FsFileSystem* fs, const char* path, u64 size, u32 option);

View File

@ -442,10 +442,10 @@ Result fsdevMountSdmc(void)
return rc; return rc;
} }
Result fsdevMountSaveData(const char *name, u64 program_id, AccountUid uid) Result fsdevMountSaveData(const char *name, u64 application_id, AccountUid uid)
{ {
FsFileSystem fs; FsFileSystem fs;
Result rc = fsOpen_SaveData(&fs, program_id, uid); Result rc = fsOpen_SaveData(&fs, application_id, uid);
if(R_SUCCEEDED(rc)) if(R_SUCCEEDED(rc))
{ {
int ret = fsdevMountDevice(name, fs); int ret = fsdevMountDevice(name, fs);
@ -455,10 +455,10 @@ Result fsdevMountSaveData(const char *name, u64 program_id, AccountUid uid)
return rc; return rc;
} }
Result fsdevMountSystemSaveData(const char *name, FsSaveDataSpaceId saveDataSpaceId, u64 saveID, AccountUid uid) Result fsdevMountSystemSaveData(const char *name, FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid)
{ {
FsFileSystem fs; FsFileSystem fs;
Result rc = fsOpen_SystemSaveData(&fs, saveDataSpaceId, saveID, uid); Result rc = fsOpen_SystemSaveData(&fs, save_data_space_id, system_save_data_id, uid);
if(R_SUCCEEDED(rc)) if(R_SUCCEEDED(rc))
{ {
int ret = fsdevMountDevice(name, fs); int ret = fsdevMountDevice(name, fs);

View File

@ -185,7 +185,7 @@ Result fsOpenFileSystemWithId(FsFileSystem* out, u64 id, FsFileSystemType fsType
return _fsOpenFileSystem(out, fsType, sendStr); return _fsOpenFileSystem(out, fsType, sendStr);
} }
Result fsOpenBisFileSystem(FsFileSystem* out, FsBisStorageId partitionId, const char* string) { Result fsOpenBisFileSystem(FsFileSystem* out, FsBisPartitionId partitionId, const char* string) {
char tmpstr[FS_MAX_PATH] = {0}; char tmpstr[FS_MAX_PATH] = {0};
strncpy(tmpstr, string, sizeof(tmpstr)-1); strncpy(tmpstr, string, sizeof(tmpstr)-1);
@ -198,7 +198,7 @@ Result fsOpenBisFileSystem(FsFileSystem* out, FsBisStorageId partitionId, const
); );
} }
Result fsOpenBisStorage(FsStorage* out, FsBisStorageId partitionId) { Result fsOpenBisStorage(FsStorage* out, FsBisPartitionId partitionId) {
u32 tmp=partitionId; u32 tmp=partitionId;
return _fsObjectDispatchIn(&g_fsSrv, 12, tmp, return _fsObjectDispatchIn(&g_fsSrv, 12, tmp,
.out_num_objects = 1, .out_num_objects = 1,
@ -219,14 +219,14 @@ Result fsCreateSaveDataFileSystemBySystemSaveDataId(const FsSaveDataAttribute* a
return _fsObjectDispatchIn(&g_fsSrv, 23, in); return _fsObjectDispatchIn(&g_fsSrv, 23, in);
} }
Result fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId saveDataSpaceId, u64 saveID) { Result fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId save_data_space_id, u64 saveID) {
if (hosversionBefore(2,0,0)) if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct { const struct {
u8 saveDataSpaceId; u8 save_data_space_id;
u64 saveID; u64 saveID;
} in = { (u8)saveDataSpaceId, saveID }; } in = { (u8)save_data_space_id, saveID };
return _fsObjectDispatchIn(&g_fsSrv, 25, in); return _fsObjectDispatchIn(&g_fsSrv, 25, in);
} }
@ -240,7 +240,7 @@ Result fsIsExFatSupported(bool* out) {
return _fsCmdNoInOutBool(&g_fsSrv, out, 27); return _fsCmdNoInOutBool(&g_fsSrv, out, 27);
} }
Result fsOpenGameCardFileSystem(FsFileSystem* out, const FsGameCardHandle* handle, FsGameCardPartiton partition) { Result fsOpenGameCardFileSystem(FsFileSystem* out, const FsGameCardHandle* handle, FsGameCardPartition partition) {
const struct { const struct {
FsGameCardHandle handle; FsGameCardHandle handle;
u32 partition; u32 partition;
@ -252,27 +252,27 @@ Result fsOpenGameCardFileSystem(FsFileSystem* out, const FsGameCardHandle* handl
); );
} }
Result fsExtendSaveDataFileSystem(FsSaveDataSpaceId saveDataSpaceId, u64 saveID, s64 dataSize, s64 journalSize) { Result fsExtendSaveDataFileSystem(FsSaveDataSpaceId save_data_space_id, u64 saveID, s64 data_size, s64 journal_size) {
if (hosversionBefore(3,0,0)) if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct { const struct {
u8 saveDataSpaceId; u8 save_data_space_id;
u8 pad[7]; u8 pad[7];
u64 saveID; u64 saveID;
s64 dataSize; s64 data_size;
s64 journalSize; s64 journal_size;
} in = { (u8)saveDataSpaceId, {0}, saveID, dataSize, journalSize }; } in = { (u8)save_data_space_id, {0}, saveID, data_size, journal_size };
return _fsObjectDispatchIn(&g_fsSrv, 32, in); return _fsObjectDispatchIn(&g_fsSrv, 32, in);
} }
Result fsOpenSaveDataFileSystem(FsFileSystem* out, FsSaveDataSpaceId saveDataSpaceId, const FsSaveDataAttribute *attr) { Result fsOpenSaveDataFileSystem(FsFileSystem* out, FsSaveDataSpaceId save_data_space_id, const FsSaveDataAttribute *attr) {
const struct { const struct {
u8 saveDataSpaceId; u8 save_data_space_id;
u8 pad[7]; u8 pad[7];
FsSaveDataAttribute attr; FsSaveDataAttribute attr;
} in = { (u8)saveDataSpaceId, {0}, *attr }; } in = { (u8)save_data_space_id, {0}, *attr };
return _fsObjectDispatchIn(&g_fsSrv, 51, in, return _fsObjectDispatchIn(&g_fsSrv, 51, in,
.out_num_objects = 1, .out_num_objects = 1,
@ -280,12 +280,12 @@ Result fsOpenSaveDataFileSystem(FsFileSystem* out, FsSaveDataSpaceId saveDataSpa
); );
} }
Result fsOpenSaveDataFileSystemBySystemSaveDataId(FsFileSystem* out, FsSaveDataSpaceId saveDataSpaceId, const FsSaveDataAttribute *attr) { Result fsOpenSaveDataFileSystemBySystemSaveDataId(FsFileSystem* out, FsSaveDataSpaceId save_data_space_id, const FsSaveDataAttribute *attr) {
const struct { const struct {
u8 saveDataSpaceId; u8 save_data_space_id;
u8 pad[7]; u8 pad[7];
FsSaveDataAttribute attr; FsSaveDataAttribute attr;
} in = { (u8)saveDataSpaceId, {0}, *attr }; } in = { (u8)save_data_space_id, {0}, *attr };
return _fsObjectDispatchIn(&g_fsSrv, 52, in, return _fsObjectDispatchIn(&g_fsSrv, 52, in,
.out_num_objects = 1, .out_num_objects = 1,
@ -293,14 +293,14 @@ Result fsOpenSaveDataFileSystemBySystemSaveDataId(FsFileSystem* out, FsSaveDataS
); );
} }
Result fsReadSaveDataFileSystemExtraDataBySaveDataSpaceId(void* buf, size_t len, FsSaveDataSpaceId saveDataSpaceId, u64 saveID) { Result fsReadSaveDataFileSystemExtraDataBySaveDataSpaceId(void* buf, size_t len, FsSaveDataSpaceId save_data_space_id, u64 saveID) {
if (hosversionBefore(3,0,0)) if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct { const struct {
u8 saveDataSpaceId; u8 save_data_space_id;
u64 saveID; u64 saveID;
} in = { (u8)saveDataSpaceId, saveID }; } in = { (u8)save_data_space_id, saveID };
return _fsObjectDispatchIn(&g_fsSrv, 57, in, return _fsObjectDispatchIn(&g_fsSrv, 57, in,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
@ -315,14 +315,14 @@ Result fsReadSaveDataFileSystemExtraData(void* buf, size_t len, u64 saveID) {
); );
} }
Result fsWriteSaveDataFileSystemExtraData(const void* buf, size_t len, FsSaveDataSpaceId saveDataSpaceId, u64 saveID) { Result fsWriteSaveDataFileSystemExtraData(const void* buf, size_t len, FsSaveDataSpaceId save_data_space_id, u64 saveID) {
if (hosversionBefore(2,0,0)) if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct { const struct {
u8 saveDataSpaceId; u8 save_data_space_id;
u64 saveID; u64 saveID;
} in = { (u8)saveDataSpaceId, saveID }; } in = { (u8)save_data_space_id, saveID };
return _fsObjectDispatchIn(&g_fsSrv, 59, in, return _fsObjectDispatchIn(&g_fsSrv, 59, in,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_In },
@ -334,8 +334,8 @@ static Result _fsOpenSaveDataInfoReader(FsSaveDataInfoReader* out) {
return _fsCmdGetSession(&g_fsSrv, &out->s, 60); return _fsCmdGetSession(&g_fsSrv, &out->s, 60);
} }
static Result _fsOpenSaveDataInfoReaderBySaveDataSpaceId(FsSaveDataInfoReader* out, FsSaveDataSpaceId saveDataSpaceId) { static Result _fsOpenSaveDataInfoReaderBySaveDataSpaceId(FsSaveDataInfoReader* out, FsSaveDataSpaceId save_data_space_id) {
u8 in = (u8)saveDataSpaceId; u8 in = (u8)save_data_space_id;
return _fsObjectDispatchIn(&g_fsSrv, 61, in, return _fsObjectDispatchIn(&g_fsSrv, 61, in,
.out_num_objects = 1, .out_num_objects = 1,
.out_objects = &out->s, .out_objects = &out->s,
@ -343,11 +343,11 @@ static Result _fsOpenSaveDataInfoReaderBySaveDataSpaceId(FsSaveDataInfoReader* o
} }
Result fsOpenSaveDataInfoReader(FsSaveDataInfoReader* out, FsSaveDataSpaceId saveDataSpaceId) { Result fsOpenSaveDataInfoReader(FsSaveDataInfoReader* out, FsSaveDataSpaceId save_data_space_id) {
if (saveDataSpaceId == FsSaveDataSpaceId_All) { if (save_data_space_id == FsSaveDataSpaceId_All) {
return _fsOpenSaveDataInfoReader(out); return _fsOpenSaveDataInfoReader(out);
} else { } else {
return _fsOpenSaveDataInfoReaderBySaveDataSpaceId(out, saveDataSpaceId); return _fsOpenSaveDataInfoReaderBySaveDataSpaceId(out, save_data_space_id);
} }
} }
@ -446,48 +446,48 @@ Result fsGetGlobalAccessLogMode(u32* out_mode) {
} }
// Wrapper(s) for fsCreateSaveDataFileSystemBySystemSaveDataId. // Wrapper(s) for fsCreateSaveDataFileSystemBySystemSaveDataId.
Result fsCreate_SystemSaveDataWithOwner(FsSaveDataSpaceId saveDataSpaceId, u64 saveID, AccountUid uid, u64 ownerId, u64 size, u64 journalSize, u32 flags) { Result fsCreate_SystemSaveDataWithOwner(FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid, u64 owner_id, u64 size, u64 journal_size, u32 flags) {
FsSaveDataAttribute attr = { FsSaveDataAttribute attr = {
.uid = uid, .uid = uid,
.saveID = saveID, .system_save_data_id = system_save_data_id,
}; };
FsSaveDataCreationInfo create = { FsSaveDataCreationInfo create = {
.size = size, .save_data_size = size,
.journalSize = journalSize, .journal_size = journal_size,
.blockSize = 0x4000, .available_size = 0x4000,
.ownerId = ownerId, .owner_id = owner_id,
.flags = flags, .flags = flags,
.saveDataSpaceId = saveDataSpaceId, .save_data_space_id = save_data_space_id,
}; };
return fsCreateSaveDataFileSystemBySystemSaveDataId(&attr, &create); return fsCreateSaveDataFileSystemBySystemSaveDataId(&attr, &create);
} }
Result fsCreate_SystemSaveData(FsSaveDataSpaceId saveDataSpaceId, u64 saveID, u64 size, u64 journalSize, u32 flags) { Result fsCreate_SystemSaveData(FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, u64 size, u64 journal_size, u32 flags) {
return fsCreate_SystemSaveDataWithOwner(saveDataSpaceId, saveID, (AccountUid){}, 0, size, journalSize, flags); return fsCreate_SystemSaveDataWithOwner(save_data_space_id, system_save_data_id, (AccountUid){}, 0, size, journal_size, flags);
} }
// Wrapper(s) for fsOpenSaveDataFileSystem. // Wrapper(s) for fsOpenSaveDataFileSystem.
Result fsOpen_SaveData(FsFileSystem* out, u64 program_id, AccountUid uid) { Result fsOpen_SaveData(FsFileSystem* out, u64 application_id, AccountUid uid) {
FsSaveDataAttribute attr; FsSaveDataAttribute attr;
memset(&attr, 0, sizeof(attr)); memset(&attr, 0, sizeof(attr));
attr.program_id = program_id; attr.application_id = application_id;
attr.uid = uid; attr.uid = uid;
attr.saveDataType = FsSaveDataType_SaveData; attr.save_data_type = FsSaveDataType_Account;
return fsOpenSaveDataFileSystem(out, FsSaveDataSpaceId_User, &attr); return fsOpenSaveDataFileSystem(out, FsSaveDataSpaceId_User, &attr);
} }
Result fsOpen_SystemSaveData(FsFileSystem* out, FsSaveDataSpaceId saveDataSpaceId, u64 saveID, AccountUid uid) { Result fsOpen_SystemSaveData(FsFileSystem* out, FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid) {
FsSaveDataAttribute attr; FsSaveDataAttribute attr;
memset(&attr, 0, sizeof(attr)); memset(&attr, 0, sizeof(attr));
attr.uid = uid; attr.uid = uid;
attr.saveID = saveID; attr.system_save_data_id = system_save_data_id;
attr.saveDataType = FsSaveDataType_SystemSaveData; attr.save_data_type = FsSaveDataType_System;
return fsOpenSaveDataFileSystemBySystemSaveDataId(out, saveDataSpaceId, &attr); return fsOpenSaveDataFileSystemBySystemSaveDataId(out, save_data_space_id, &attr);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------