Add fsUseSession/fsEndUseSession

This commit is contained in:
fincs 2015-11-19 11:35:02 +01:00
parent f6ebc7f285
commit 3fbea733c6
3 changed files with 162 additions and 97 deletions

View File

@ -239,7 +239,17 @@ Result fsInit(void);
void fsExit(void); void fsExit(void);
/** /**
* Creates an FS_Path instance. * @brief Sets the FSUSER session to use in the current thread.
* @param session The handle of the FSUSER session to use.
* @param sdmc When true, SDMC archive commands are redirected to this session too. Otherwise the default session is used.
*/
void fsUseSession(Handle session, bool sdmc);
/// Disables the FSUSER session override in the current thread.
void fsEndUseSession(void);
/**
* @brief Creates an FS_Path instance.
* @param type Type of path. * @param type Type of path.
* @param path Path to use. * @param path Path to use.
* @return The created FS_Path instance. * @return The created FS_Path instance.
@ -262,8 +272,11 @@ Handle* fsGetSessionHandle(void);
*/ */
Result FSUSER_Control(FS_Action action, void* input, u32 inputSize, void* output, u32 outputSize); Result FSUSER_Control(FS_Action action, void* input, u32 inputSize, void* output, u32 outputSize);
/// Initializes the FSUSER session. /**
Result FSUSER_Initialize(void); * @brief Initializes a FSUSER session.
* @param session The handle of the FSUSER session to initialize.
*/
Result FSUSER_Initialize(Handle session);
/** /**
* @brief Opens a file. * @brief Opens a file.
@ -843,10 +856,11 @@ Result FSUSER_SwitchCleanupInvalidSaveData(bool enable);
Result FSUSER_EnumerateSystemSaveData(u32* idsWritten, u32 idsSize, u64* ids); Result FSUSER_EnumerateSystemSaveData(u32* idsWritten, u32 idsSize, u64* ids);
/** /**
* @brief Initializes the FSUSER session with an SDK version. * @brief Initializes a FSUSER session with an SDK version.
* @param session The handle of the FSUSER session to initialize.
* @param version SDK version to initialize with. * @param version SDK version to initialize with.
*/ */
Result FSUSER_InitializeWithSdkVersion(u32 version); Result FSUSER_InitializeWithSdkVersion(Handle session, u32 version);
/** /**
* @brief Sets the file system priority. * @brief Sets the file system priority.

23
libctru/source/internal.h Normal file
View File

@ -0,0 +1,23 @@
#pragma once
#include <3ds/types.h>
#include <3ds/result.h>
#include <3ds/svc.h>
#include <sys/reent.h>
#define FS_OVERRIDE_MAGIC 0x21465324 // !FS$
typedef struct
{
// Pointer to this thread's newlib state
struct _reent* reent;
// FS session override
u32 fs_magic;
Handle fs_session;
bool fs_sdmc;
} ThreadVars;
static inline ThreadVars* getThreadVars(void)
{
return (ThreadVars*)getThreadLocalStorage();
}

View File

@ -7,10 +7,24 @@
#include <3ds/services/fs.h> #include <3ds/services/fs.h>
#include <3ds/ipc.h> #include <3ds/ipc.h>
#include <3ds/env.h> #include <3ds/env.h>
#include "../internal.h"
static Handle fsuHandle; static Handle fsuHandle;
static int fsuRefCount; static int fsuRefCount;
static Handle fsSessionForArchive(FS_ArchiveID arch)
{
ThreadVars* tv = getThreadVars();
if (tv->fs_magic == FS_OVERRIDE_MAGIC && (arch != ARCHIVE_SDMC || tv->fs_sdmc))
return tv->fs_session;
return fsuHandle;
}
static Handle fsSession(void)
{
return fsSessionForArchive(0);
}
Result fsInit(void) Result fsInit(void)
{ {
Result ret = 0; Result ret = 0;
@ -20,7 +34,7 @@ Result fsInit(void)
ret = srvGetServiceHandle(&fsuHandle, "fs:USER"); ret = srvGetServiceHandle(&fsuHandle, "fs:USER");
if (R_SUCCEEDED(ret) && envGetHandle("fs:USER") == 0) if (R_SUCCEEDED(ret) && envGetHandle("fs:USER") == 0)
{ {
ret = FSUSER_Initialize(); ret = FSUSER_Initialize(fsuHandle);
if (R_FAILED(ret)) svcCloseHandle(fsuHandle); if (R_FAILED(ret)) svcCloseHandle(fsuHandle);
} }
@ -34,6 +48,20 @@ void fsExit(void)
svcCloseHandle(fsuHandle); svcCloseHandle(fsuHandle);
} }
void fsUseSession(Handle session, bool sdmc)
{
ThreadVars* tv = getThreadVars();
tv->fs_magic = FS_OVERRIDE_MAGIC;
tv->fs_session = session;
tv->fs_sdmc = sdmc;
}
void fsEndUseSession(void)
{
ThreadVars* tv = getThreadVars();
tv->fs_magic = 0;
}
FS_Path fsMakePath(FS_PathType type, const void* path) FS_Path fsMakePath(FS_PathType type, const void* path)
{ {
FS_Path p = { type, 0, path }; FS_Path p = { type, 0, path };
@ -77,12 +105,12 @@ Result FSUSER_Control(FS_Action action, void* input, u32 inputSize, void* output
cmdbuf[7] = (u32) output; cmdbuf[7] = (u32) output;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
Result FSUSER_Initialize(void) Result FSUSER_Initialize(Handle session)
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
@ -90,7 +118,7 @@ Result FSUSER_Initialize(void)
cmdbuf[1] = IPC_Desc_CurProcessHandle(); cmdbuf[1] = IPC_Desc_CurProcessHandle();
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(session))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -111,7 +139,7 @@ Result FSUSER_OpenFile(Handle* out, FS_Archive archive, FS_Path path, u32 openFl
cmdbuf[9] = (u32) path.data; cmdbuf[9] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
if(out) *out = cmdbuf[3]; if(out) *out = cmdbuf[3];
@ -137,7 +165,7 @@ Result FSUSER_OpenFileDirectly(Handle* out, FS_Archive archive, FS_Path path, u3
cmdbuf[12] = (u32) path.data; cmdbuf[12] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
if(out) *out = cmdbuf[3]; if(out) *out = cmdbuf[3];
@ -158,7 +186,7 @@ Result FSUSER_DeleteFile(FS_Archive archive, FS_Path path)
cmdbuf[7] = (u32) path.data; cmdbuf[7] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -183,7 +211,7 @@ Result FSUSER_RenameFile(FS_Archive srcArchive, FS_Path srcPath, FS_Archive dstA
cmdbuf[13] = (u32) dstPath.data; cmdbuf[13] = (u32) dstPath.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(srcArchive.id)))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -202,7 +230,7 @@ Result FSUSER_DeleteDirectory(FS_Archive archive, FS_Path path)
cmdbuf[7] = (u32) path.data; cmdbuf[7] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -221,7 +249,7 @@ Result FSUSER_DeleteDirectoryRecursively(FS_Archive archive, FS_Path path)
cmdbuf[7] = (u32) path.data; cmdbuf[7] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -243,7 +271,7 @@ Result FSUSER_CreateFile(FS_Archive archive, FS_Path path, u32 attributes, u64 f
cmdbuf[10] = (u32) path.data; cmdbuf[10] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -263,7 +291,7 @@ Result FSUSER_CreateDirectory(FS_Archive archive, FS_Path path, u32 attributes)
cmdbuf[8] = (u32) path.data; cmdbuf[8] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -288,7 +316,7 @@ Result FSUSER_RenameDirectory(FS_Archive srcArchive, FS_Path srcPath, FS_Archive
cmdbuf[13] = (u32) dstPath.data; cmdbuf[13] = (u32) dstPath.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(srcArchive.id)))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -306,7 +334,7 @@ Result FSUSER_OpenDirectory(Handle* out, FS_Archive archive, FS_Path path)
cmdbuf[6] = (u32) path.data; cmdbuf[6] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
if(out) *out = cmdbuf[3]; if(out) *out = cmdbuf[3];
@ -327,7 +355,7 @@ Result FSUSER_OpenArchive(FS_Archive* archive)
cmdbuf[5] = (u32) archive->lowPath.data; cmdbuf[5] = (u32) archive->lowPath.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
archive->handle = cmdbuf[2] | ((u64) cmdbuf[3] << 32); archive->handle = cmdbuf[2] | ((u64) cmdbuf[3] << 32);
@ -350,7 +378,7 @@ Result FSUSER_ControlArchive(FS_Archive archive, FS_ArchiveAction action, void*
cmdbuf[9] = (u32) output; cmdbuf[9] = (u32) output;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -366,7 +394,7 @@ Result FSUSER_CloseArchive(FS_Archive* archive)
cmdbuf[2] = (u32) (archive->handle >> 32); cmdbuf[2] = (u32) (archive->handle >> 32);
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -380,7 +408,7 @@ Result FSUSER_GetFreeBytes(u64* freeBytes, FS_Archive archive)
cmdbuf[2] = (u32) (archive.handle >> 32); cmdbuf[2] = (u32) (archive.handle >> 32);
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
if(freeBytes) *freeBytes = cmdbuf[2] | ((u64) cmdbuf[3] << 32); if(freeBytes) *freeBytes = cmdbuf[2] | ((u64) cmdbuf[3] << 32);
@ -394,7 +422,7 @@ Result FSUSER_GetCardType(FS_CardType* type)
cmdbuf[0] = IPC_MakeHeader(0x813,0,0); // 0x8130000 cmdbuf[0] = IPC_MakeHeader(0x813,0,0); // 0x8130000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(type) *type = cmdbuf[2] & 0xFF; if(type) *type = cmdbuf[2] & 0xFF;
@ -408,7 +436,7 @@ Result FSUSER_GetSdmcArchiveResource(FS_ArchiveResource* archiveResource)
cmdbuf[0] = IPC_MakeHeader(0x814,0,0); // 0x8140000 cmdbuf[0] = IPC_MakeHeader(0x814,0,0); // 0x8140000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(ARCHIVE_SDMC)))) return ret;
if(archiveResource) memcpy(archiveResource, &cmdbuf[2], sizeof(FS_ArchiveResource)); if(archiveResource) memcpy(archiveResource, &cmdbuf[2], sizeof(FS_ArchiveResource));
@ -422,7 +450,7 @@ Result FSUSER_GetNandArchiveResource(FS_ArchiveResource* archiveResource)
cmdbuf[0] = IPC_MakeHeader(0x815,0,0); // 0x8150000 cmdbuf[0] = IPC_MakeHeader(0x815,0,0); // 0x8150000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(archiveResource) memcpy(archiveResource, &cmdbuf[2], sizeof(FS_ArchiveResource)); if(archiveResource) memcpy(archiveResource, &cmdbuf[2], sizeof(FS_ArchiveResource));
@ -436,7 +464,7 @@ Result FSUSER_GetSdmcFatfsError(u32* error)
cmdbuf[0] = IPC_MakeHeader(0x816,0,0); // 0x8160000 cmdbuf[0] = IPC_MakeHeader(0x816,0,0); // 0x8160000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(error) *error = cmdbuf[2]; if(error) *error = cmdbuf[2];
@ -450,7 +478,7 @@ Result FSUSER_IsSdmcDetected(bool *detected)
cmdbuf[0] = IPC_MakeHeader(0x817,0,0); // 0x8170000 cmdbuf[0] = IPC_MakeHeader(0x817,0,0); // 0x8170000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(detected) *detected = cmdbuf[2] & 0xFF; if(detected) *detected = cmdbuf[2] & 0xFF;
@ -464,7 +492,7 @@ Result FSUSER_IsSdmcWritable(bool *writable)
cmdbuf[0] = IPC_MakeHeader(0x818,0,0); // 0x8180000 cmdbuf[0] = IPC_MakeHeader(0x818,0,0); // 0x8180000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(writable) *writable = cmdbuf[2] & 0xFF; if(writable) *writable = cmdbuf[2] & 0xFF;
@ -481,7 +509,7 @@ Result FSUSER_GetSdmcCid(u8* out, u32 length)
cmdbuf[3] = (u32) out; cmdbuf[3] = (u32) out;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -496,7 +524,7 @@ Result FSUSER_GetNandCid(u8* out, u32 length)
cmdbuf[3] = (u32) out; cmdbuf[3] = (u32) out;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -508,7 +536,7 @@ Result FSUSER_GetSdmcSpeedInfo(u32 *speedInfo)
cmdbuf[0] = IPC_MakeHeader(0x81B,0,0); // 0x81B0000 cmdbuf[0] = IPC_MakeHeader(0x81B,0,0); // 0x81B0000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(speedInfo) *speedInfo = cmdbuf[2]; if(speedInfo) *speedInfo = cmdbuf[2];
@ -522,7 +550,7 @@ Result FSUSER_GetNandSpeedInfo(u32 *speedInfo)
cmdbuf[0] = IPC_MakeHeader(0x81C,0,0); // 0x81C0000 cmdbuf[0] = IPC_MakeHeader(0x81C,0,0); // 0x81C0000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(speedInfo) *speedInfo = cmdbuf[2]; if(speedInfo) *speedInfo = cmdbuf[2];
@ -539,7 +567,7 @@ Result FSUSER_GetSdmcLog(u8* out, u32 length)
cmdbuf[3] = (u32) out; cmdbuf[3] = (u32) out;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -554,7 +582,7 @@ Result FSUSER_GetNandLog(u8* out, u32 length)
cmdbuf[3] = (u32) out; cmdbuf[3] = (u32) out;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -566,7 +594,7 @@ Result FSUSER_ClearSdmcLog(void)
cmdbuf[0] = IPC_MakeHeader(0x81F,0,0); // 0x81F0000 cmdbuf[0] = IPC_MakeHeader(0x81F,0,0); // 0x81F0000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -578,7 +606,7 @@ Result FSUSER_ClearNandLog(void)
cmdbuf[0] = IPC_MakeHeader(0x820,0,0); // 0x8200000 cmdbuf[0] = IPC_MakeHeader(0x820,0,0); // 0x8200000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -590,7 +618,7 @@ Result FSUSER_CardSlotIsInserted(bool* inserted)
cmdbuf[0] = IPC_MakeHeader(0x821,0,0); // 0x8210000 cmdbuf[0] = IPC_MakeHeader(0x821,0,0); // 0x8210000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(inserted) *inserted = cmdbuf[2] & 0xFF; if(inserted) *inserted = cmdbuf[2] & 0xFF;
@ -604,7 +632,7 @@ Result FSUSER_CardSlotPowerOn(bool* status)
cmdbuf[0] = IPC_MakeHeader(0x822,0,0); // 0x8220000 cmdbuf[0] = IPC_MakeHeader(0x822,0,0); // 0x8220000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(status) *status = cmdbuf[2] & 0xFF; if(status) *status = cmdbuf[2] & 0xFF;
@ -618,7 +646,7 @@ Result FSUSER_CardSlotPowerOff(bool* status)
cmdbuf[0] = IPC_MakeHeader(0x823,0,0); // 0x8230000 cmdbuf[0] = IPC_MakeHeader(0x823,0,0); // 0x8230000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(status) *status = cmdbuf[2] & 0xFF; if(status) *status = cmdbuf[2] & 0xFF;
@ -632,7 +660,7 @@ Result FSUSER_CardSlotGetCardIFPowerStatus(bool* status)
cmdbuf[0] = IPC_MakeHeader(0x824,0,0); // 0x8240000 cmdbuf[0] = IPC_MakeHeader(0x824,0,0); // 0x8240000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(status) *status = cmdbuf[2] & 0xFF; if(status) *status = cmdbuf[2] & 0xFF;
@ -647,7 +675,7 @@ Result FSUSER_CardNorDirectCommand(u8 commandId)
cmdbuf[1] = commandId; cmdbuf[1] = commandId;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -661,7 +689,7 @@ Result FSUSER_CardNorDirectCommandWithAddress(u8 commandId, u32 address)
cmdbuf[2] = address; cmdbuf[2] = address;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -677,7 +705,7 @@ Result FSUSER_CardNorDirectRead(u8 commandId, u32 size, u8* output)
cmdbuf[4] = (u32) output; cmdbuf[4] = (u32) output;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -694,7 +722,7 @@ Result FSUSER_CardNorDirectReadWithAddress(u8 commandId, u32 address, u32 size,
cmdbuf[5] = (u32) output; cmdbuf[5] = (u32) output;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -710,7 +738,7 @@ Result FSUSER_CardNorDirectWrite(u8 commandId, u32 size, u8* input)
cmdbuf[4] = (u32) input; cmdbuf[4] = (u32) input;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -727,7 +755,7 @@ Result FSUSER_CardNorDirectWriteWithAddress(u8 commandId, u32 address, u32 size,
cmdbuf[5] = (u32) input; cmdbuf[5] = (u32) input;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -744,7 +772,7 @@ Result FSUSER_CardNorDirectRead_4xIO(u8 commandId, u32 address, u32 size, u8* ou
cmdbuf[5] = (u32) output; cmdbuf[5] = (u32) output;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -760,7 +788,7 @@ Result FSUSER_CardNorDirectCpuWriteWithoutVerify(u32 address, u32 size, u8* inpu
cmdbuf[4] = (u32) input; cmdbuf[4] = (u32) input;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -773,7 +801,7 @@ Result FSUSER_CardNorDirectSectorEraseWithoutVerify(u32 address)
cmdbuf[1] = address; cmdbuf[1] = address;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -786,7 +814,7 @@ Result FSUSER_GetProductInfo(FS_ProductInfo* info, u32 processId)
cmdbuf[1] = processId; cmdbuf[1] = processId;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(info) memcpy(info, &cmdbuf[2], sizeof(FS_ProductInfo)); if(info) memcpy(info, &cmdbuf[2], sizeof(FS_ProductInfo));
@ -801,7 +829,7 @@ Result FSUSER_GetProgramLaunchInfo(FS_ProgramInfo* info, u32 processId)
cmdbuf[1] = processId; cmdbuf[1] = processId;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(info) memcpy(info, &cmdbuf[2], sizeof(FS_ProgramInfo)); if(info) memcpy(info, &cmdbuf[2], sizeof(FS_ProgramInfo));
@ -816,7 +844,7 @@ Result FSUSER_SetCardSpiBaudRate(FS_CardSpiBaudRate baudRate)
cmdbuf[1] = baudRate; cmdbuf[1] = baudRate;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -829,7 +857,7 @@ Result FSUSER_SetCardSpiBusMode(FS_CardSpiBusMode busMode)
cmdbuf[1] = busMode; cmdbuf[1] = busMode;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -841,7 +869,7 @@ Result FSUSER_SendInitializeInfoTo9(void)
cmdbuf[0] = IPC_MakeHeader(0x839,0,0); // 0x8390000 cmdbuf[0] = IPC_MakeHeader(0x839,0,0); // 0x8390000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -857,7 +885,7 @@ Result FSUSER_GetSpecialContentIndex(u16* index, FS_MediaType mediaType, u64 pro
cmdbuf[4] = type; cmdbuf[4] = type;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(index) *index = cmdbuf[2] & 0xFFFF; if(index) *index = cmdbuf[2] & 0xFFFF;
@ -876,7 +904,7 @@ Result FSUSER_GetLegacyRomHeader(FS_MediaType mediaType, u64 programId, u8* head
cmdbuf[5] = (u32) header; cmdbuf[5] = (u32) header;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -893,7 +921,7 @@ Result FSUSER_GetLegacyBannerData(FS_MediaType mediaType, u64 programId, u8* ban
cmdbuf[5] = (u32) banner; cmdbuf[5] = (u32) banner;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -909,7 +937,7 @@ Result FSUSER_CheckAuthorityToAccessExtSaveData(bool* access, FS_MediaType media
cmdbuf[4] = processId; cmdbuf[4] = processId;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(access) *access = cmdbuf[2] & 0xFF; if(access) *access = cmdbuf[2] & 0xFF;
@ -928,7 +956,7 @@ Result FSUSER_QueryTotalQuotaSize(u64* quotaSize, u32 directories, u32 files, u3
cmdbuf[5] = (u32) fileSizes; cmdbuf[5] = (u32) fileSizes;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(quotaSize) *quotaSize = cmdbuf[2] | ((u64) cmdbuf[3] << 32); if(quotaSize) *quotaSize = cmdbuf[2] | ((u64) cmdbuf[3] << 32);
@ -943,7 +971,7 @@ Result FSUSER_AbnegateAccessRight(u32 accessRight)
cmdbuf[1] = accessRight; cmdbuf[1] = accessRight;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -955,7 +983,7 @@ Result FSUSER_DeleteSdmcRoot(void)
cmdbuf[0] = IPC_MakeHeader(0x841,0,0); // 0x8410000 cmdbuf[0] = IPC_MakeHeader(0x841,0,0); // 0x8410000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -968,7 +996,7 @@ Result FSUSER_DeleteAllExtSaveDataOnNand(void)
cmdbuf[1] = 0; cmdbuf[1] = 0;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -980,7 +1008,7 @@ Result FSUSER_InitializeCtrFileSystem(void)
cmdbuf[0] = IPC_MakeHeader(0x843,0,0); // 0x8430000 cmdbuf[0] = IPC_MakeHeader(0x843,0,0); // 0x8430000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -992,7 +1020,7 @@ Result FSUSER_CreateSeed(void)
cmdbuf[0] = IPC_MakeHeader(0x844,0,0); // 0x8440000 cmdbuf[0] = IPC_MakeHeader(0x844,0,0); // 0x8440000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1009,7 +1037,7 @@ Result FSUSER_GetFormatInfo(u32* totalSize, u32* directories, u32* files, bool*
cmdbuf[5] = (u32) path.data; cmdbuf[5] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archiveId)))) return ret;
if(totalSize) *totalSize = cmdbuf[2]; if(totalSize) *totalSize = cmdbuf[2];
if(directories) *directories = cmdbuf[3]; if(directories) *directories = cmdbuf[3];
@ -1032,7 +1060,7 @@ Result FSUSER_GetLegacyRomHeader2(u32 headerSize, FS_MediaType mediaType, u64 pr
cmdbuf[6] = (u32) header; cmdbuf[6] = (u32) header;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1047,7 +1075,7 @@ Result FSUSER_GetSdmcCtrRootPath(u8* out, u32 length)
cmdbuf[3] = (u32) out; cmdbuf[3] = (u32) out;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1060,7 +1088,7 @@ Result FSUSER_GetArchiveResource(FS_ArchiveResource* archiveResource, FS_MediaTy
cmdbuf[1] = mediaType; cmdbuf[1] = mediaType;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(archiveResource) memcpy(archiveResource, &cmdbuf[2], sizeof(FS_ArchiveResource)); if(archiveResource) memcpy(archiveResource, &cmdbuf[2], sizeof(FS_ArchiveResource));
@ -1076,7 +1104,7 @@ Result FSUSER_ExportIntegrityVerificationSeed(FS_IntegrityVerificationSeed* seed
cmdbuf[3] = (u32) seed; cmdbuf[3] = (u32) seed;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1090,7 +1118,7 @@ Result FSUSER_ImportIntegrityVerificationSeed(FS_IntegrityVerificationSeed* seed
cmdbuf[3] = (u32) seed; cmdbuf[3] = (u32) seed;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1113,7 +1141,7 @@ Result FSUSER_FormatSaveData(FS_ArchiveID archiveId, FS_Path path, u32 blocks, u
cmdbuf[11] = (u32) path.data; cmdbuf[11] = (u32) path.data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1131,7 +1159,7 @@ Result FSUSER_GetLegacySubBannerData(u32 bannerSize, FS_MediaType mediaType, u64
cmdbuf[6] = (u32) banner; cmdbuf[6] = (u32) banner;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1149,7 +1177,7 @@ Result FSUSER_ReadSpecialFile(u32* bytesRead, u64 fileOffset, u32 size, u8* data
cmdbuf[6] = (u32) data; cmdbuf[6] = (u32) data;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(bytesRead) *bytesRead = cmdbuf[2]; if(bytesRead) *bytesRead = cmdbuf[2];
@ -1164,7 +1192,7 @@ Result FSUSER_GetSpecialFileSize(u64* fileSize)
cmdbuf[1] = 0; cmdbuf[1] = 0;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(fileSize) *fileSize = cmdbuf[2] | ((u64) cmdbuf[3] << 32); if(fileSize) *fileSize = cmdbuf[2] | ((u64) cmdbuf[3] << 32);
@ -1186,7 +1214,7 @@ Result FSUSER_CreateExtSaveData(FS_ExtSaveDataInfo info, u32 directories, u32 fi
cmdbuf[11] = (u32) smdh; cmdbuf[11] = (u32) smdh;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1199,7 +1227,7 @@ Result FSUSER_DeleteExtSaveData(FS_ExtSaveDataInfo info)
memcpy(&cmdbuf[1], &info, sizeof(FS_ExtSaveDataInfo)); memcpy(&cmdbuf[1], &info, sizeof(FS_ExtSaveDataInfo));
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1215,7 +1243,7 @@ Result FSUSER_ReadExtSaveDataIcon(u32* bytesRead, FS_ExtSaveDataInfo info, u32 s
cmdbuf[7] = (u32) smdh; cmdbuf[7] = (u32) smdh;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(bytesRead) *bytesRead = cmdbuf[2]; if(bytesRead) *bytesRead = cmdbuf[2];
@ -1230,7 +1258,7 @@ Result FSUSER_GetExtDataBlockSize(u64* totalBlocks, u64* freeBlocks, u32* blockS
memcpy(&cmdbuf[1], &info, sizeof(FS_ExtSaveDataInfo)); memcpy(&cmdbuf[1], &info, sizeof(FS_ExtSaveDataInfo));
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(totalBlocks) *totalBlocks = cmdbuf[2] | ((u64) cmdbuf[3] << 32); if(totalBlocks) *totalBlocks = cmdbuf[2] | ((u64) cmdbuf[3] << 32);
if(freeBlocks) *freeBlocks = cmdbuf[4] | ((u64) cmdbuf[5] << 32); if(freeBlocks) *freeBlocks = cmdbuf[4] | ((u64) cmdbuf[5] << 32);
@ -1252,7 +1280,7 @@ Result FSUSER_EnumerateExtSaveData(u32* idsWritten, u32 idsSize, FS_MediaType me
cmdbuf[6] = (u32) ids; cmdbuf[6] = (u32) ids;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(idsWritten) *idsWritten = cmdbuf[2]; if(idsWritten) *idsWritten = cmdbuf[2];
@ -1274,7 +1302,7 @@ Result FSUSER_CreateSystemSaveData(FS_SystemSaveDataInfo info, u32 totalSize, u3
cmdbuf[9] = duplicateData; cmdbuf[9] = duplicateData;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1287,7 +1315,7 @@ Result FSUSER_DeleteSystemSaveData(FS_SystemSaveDataInfo info)
memcpy(&cmdbuf[1], &info, sizeof(FS_SystemSaveDataInfo)); memcpy(&cmdbuf[1], &info, sizeof(FS_SystemSaveDataInfo));
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1299,7 +1327,7 @@ Result FSUSER_StartDeviceMoveAsSource(FS_DeviceMoveContext* context)
cmdbuf[0] = IPC_MakeHeader(0x858,0,0); // 0x8580000 cmdbuf[0] = IPC_MakeHeader(0x858,0,0); // 0x8580000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(context) memcpy(context, &cmdbuf[2], sizeof(FS_DeviceMoveContext)); if(context) memcpy(context, &cmdbuf[2], sizeof(FS_DeviceMoveContext));
@ -1315,7 +1343,7 @@ Result FSUSER_StartDeviceMoveAsDestination(FS_DeviceMoveContext context, bool cl
cmdbuf[9] = clear; cmdbuf[9] = clear;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1330,7 +1358,7 @@ Result FSUSER_SetArchivePriority(FS_Archive archive, u32 priority)
cmdbuf[3] = priority; cmdbuf[3] = priority;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1344,7 +1372,7 @@ Result FSUSER_GetArchivePriority(u32* priority, FS_Archive archive)
cmdbuf[2] = (u32) (archive.handle >> 32); cmdbuf[2] = (u32) (archive.handle >> 32);
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSessionForArchive(archive.id)))) return ret;
if(priority) *priority = cmdbuf[2]; if(priority) *priority = cmdbuf[2];
@ -1361,7 +1389,7 @@ Result FSUSER_SetCtrCardLatencyParameter(u64 latency, bool emulateEndurance)
cmdbuf[3] = emulateEndurance; cmdbuf[3] = emulateEndurance;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1374,7 +1402,7 @@ Result FSUSER_SwitchCleanupInvalidSaveData(bool enable)
cmdbuf[1] = enable; cmdbuf[1] = enable;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1389,14 +1417,14 @@ Result FSUSER_EnumerateSystemSaveData(u32* idsWritten, u32 idsSize, u64* ids)
cmdbuf[3] = (u32) ids; cmdbuf[3] = (u32) ids;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(idsWritten) *idsWritten = cmdbuf[2]; if(idsWritten) *idsWritten = cmdbuf[2];
return cmdbuf[1]; return cmdbuf[1];
} }
Result FSUSER_InitializeWithSdkVersion(u32 version) Result FSUSER_InitializeWithSdkVersion(Handle session, u32 version)
{ {
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
@ -1405,7 +1433,7 @@ Result FSUSER_InitializeWithSdkVersion(u32 version)
cmdbuf[2] = IPC_Desc_CurProcessHandle(); cmdbuf[2] = IPC_Desc_CurProcessHandle();
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(session))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1418,7 +1446,7 @@ Result FSUSER_SetPriority(u32 priority)
cmdbuf[1] = priority; cmdbuf[1] = priority;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1430,7 +1458,7 @@ Result FSUSER_GetPriority(u32* priority)
cmdbuf[0] = IPC_MakeHeader(0x863,0,0); // 0x8630000 cmdbuf[0] = IPC_MakeHeader(0x863,0,0); // 0x8630000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(priority) *priority = cmdbuf[2]; if(priority) *priority = cmdbuf[2];
@ -1449,7 +1477,7 @@ Result FSUSER_SetSaveDataSecureValue(u64 value, FS_SecureValueSlot slot, u32 tit
cmdbuf[5] = titleVariation; cmdbuf[5] = titleVariation;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1464,7 +1492,7 @@ Result FSUSER_GetSaveDataSecureValue(bool* exists, u64* value, FS_SecureValueSlo
cmdbuf[3] = titleVariation; cmdbuf[3] = titleVariation;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(exists) *exists = cmdbuf[2] & 0xFF; if(exists) *exists = cmdbuf[2] & 0xFF;
if(value) *value = cmdbuf[3] | ((u64) cmdbuf[4] << 32); if(value) *value = cmdbuf[3] | ((u64) cmdbuf[4] << 32);
@ -1486,7 +1514,7 @@ Result FSUSER_ControlSecureSave(FS_SecureSaveAction action, void* input, u32 inp
cmdbuf[7] = (u32) output; cmdbuf[7] = (u32) output;
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
return cmdbuf[1]; return cmdbuf[1];
} }
@ -1498,7 +1526,7 @@ Result FSUSER_GetMediaType(FS_MediaType* mediaType)
cmdbuf[0] = IPC_MakeHeader(0x868,0,0); // 0x8680000 cmdbuf[0] = IPC_MakeHeader(0x868,0,0); // 0x8680000
Result ret = 0; Result ret = 0;
if(R_FAILED(ret = svcSendSyncRequest(fsuHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(fsSession()))) return ret;
if(mediaType) *mediaType = cmdbuf[2] & 0xFF; if(mediaType) *mediaType = cmdbuf[2] & 0xFF;