From 5e6440b9b75dffec3bf08b1ac71340d8f93378eb Mon Sep 17 00:00:00 2001 From: Lectem Date: Wed, 9 Sep 2015 15:06:21 -0400 Subject: [PATCH] Use IPC helpers for fs --- libctru/source/services/fs.c | 93 ++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/libctru/source/services/fs.c b/libctru/source/services/fs.c index 21d42dd..e9c6fa6 100644 --- a/libctru/source/services/fs.c +++ b/libctru/source/services/fs.c @@ -3,6 +3,7 @@ #include <3ds/svc.h> #include <3ds/srv.h> #include <3ds/services/fs.h> +#include <3ds/ipc.h> /*! @internal * @@ -105,8 +106,8 @@ FSUSER_Initialize(Handle handle) { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08010002; - cmdbuf[1] = 0x20; + cmdbuf[0] = IPC_MakeHeader(0x801,0,2); // 0x8010002 + cmdbuf[1] = IPC_Desc_CurProcessHandle(); Result ret = 0; if((ret = svcSendSyncRequest(handle))) @@ -165,7 +166,7 @@ FSUSER_OpenFile(Handle *out, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x080201C2; + cmdbuf[0] = IPC_MakeHeader(0x802,7,2); // 0x80201C2 cmdbuf[1] = 0; cmdbuf[2] = archive.handleLow; cmdbuf[3] = archive.handleHigh; @@ -173,7 +174,7 @@ FSUSER_OpenFile(Handle *out, cmdbuf[5] = fileLowPath.size; cmdbuf[6] = openFlags; cmdbuf[7] = attributes; - cmdbuf[8] = (fileLowPath.size << 14) | 0x2; + cmdbuf[8] = IPC_Desc_StaticBuffer(fileLowPath.size,0); cmdbuf[9] = (u32)fileLowPath.data; Result ret = 0; @@ -239,7 +240,7 @@ FSUSER_OpenFileDirectly(Handle *out, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[ 0] = 0x08030204; + cmdbuf[ 0] = IPC_MakeHeader(0x803,8,4); // 0x8030204 cmdbuf[ 1] = 0; cmdbuf[ 2] = archive.id; cmdbuf[ 3] = archive.lowPath.type; @@ -248,9 +249,9 @@ FSUSER_OpenFileDirectly(Handle *out, cmdbuf[ 6] = fileLowPath.size; cmdbuf[ 7] = openFlags; cmdbuf[ 8] = attributes; - cmdbuf[ 9] = (archive.lowPath.size << 14) | 0x802; + cmdbuf[ 9] = IPC_Desc_StaticBuffer(archive.lowPath.size,2); cmdbuf[10] = (u32)archive.lowPath.data; - cmdbuf[11] = (fileLowPath.size << 14) | 0x2; + cmdbuf[11] = IPC_Desc_StaticBuffer(fileLowPath.size,0); cmdbuf[12] = (u32)fileLowPath.data; Result ret = 0; @@ -298,13 +299,13 @@ FSUSER_DeleteFile(FS_archive archive, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08040142; + cmdbuf[0] = IPC_MakeHeader(0x804,5,2); // 0x8040142 cmdbuf[1] = 0; cmdbuf[2] = archive.handleLow; cmdbuf[3] = archive.handleHigh; cmdbuf[4] = fileLowPath.type; cmdbuf[5] = fileLowPath.size; - cmdbuf[6] = (fileLowPath.size << 14) | 0x2; + cmdbuf[6] = IPC_Desc_StaticBuffer(fileLowPath.size ,0); cmdbuf[7] = (u32)fileLowPath.data; Result ret = 0; @@ -359,7 +360,7 @@ FSUSER_RenameFile(FS_archive srcArchive, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08050244; + cmdbuf[0] = IPC_MakeHeader(0x805,9,4); // 0x8050244 cmdbuf[1] = 0; cmdbuf[2] = srcArchive.handleLow; cmdbuf[3] = srcArchive.handleHigh; @@ -369,9 +370,9 @@ FSUSER_RenameFile(FS_archive srcArchive, cmdbuf[7] = destArchive.handleHigh; cmdbuf[8] = destFileLowPath.type; cmdbuf[9] = destFileLowPath.size; - cmdbuf[10] = (srcFileLowPath.size << 14) | 0x402; + cmdbuf[10] = IPC_Desc_StaticBuffer(srcFileLowPath.size,1); cmdbuf[11] = (u32)srcFileLowPath.data; - cmdbuf[12] = (destFileLowPath.size << 14) | 0x802; + cmdbuf[12] = IPC_Desc_StaticBuffer(destFileLowPath.size,2); cmdbuf[13] = (u32)destFileLowPath.data; Result ret = 0; @@ -416,13 +417,13 @@ FSUSER_DeleteDirectory(FS_archive archive, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08060142; + cmdbuf[0] = IPC_MakeHeader(0x806,5,2); // 0x8060142 cmdbuf[1] = 0; cmdbuf[2] = archive.handleLow; cmdbuf[3] = archive.handleHigh; cmdbuf[4] = dirLowPath.type; cmdbuf[5] = dirLowPath.size; - cmdbuf[6] = (dirLowPath.size << 14) | 0x2; + cmdbuf[6] = IPC_Desc_StaticBuffer(dirLowPath.size,0); cmdbuf[7] = (u32)dirLowPath.data; Result ret = 0; @@ -467,13 +468,13 @@ FSUSER_DeleteDirectoryRecursively(FS_archive archive, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08070142; + cmdbuf[0] = IPC_MakeHeader(0x807,5,2); // 0x8070142 cmdbuf[1] = 0; cmdbuf[2] = archive.handleLow; cmdbuf[3] = archive.handleHigh; cmdbuf[4] = dirLowPath.type; cmdbuf[5] = dirLowPath.size; - cmdbuf[6] = (dirLowPath.size << 14) | 0x2; + cmdbuf[6] = IPC_Desc_StaticBuffer(dirLowPath.size,0); cmdbuf[7] = (u32)dirLowPath.data; Result ret = 0; @@ -523,7 +524,7 @@ FSUSER_CreateFile(FS_archive archive, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08080202; + cmdbuf[0] = IPC_MakeHeader(0x808,8,2); // 0x8080202 cmdbuf[1] = 0; cmdbuf[2] = archive.handleLow; cmdbuf[3] = archive.handleHigh; @@ -532,7 +533,7 @@ FSUSER_CreateFile(FS_archive archive, cmdbuf[6] = 0; cmdbuf[7] = fileSize; cmdbuf[8] = 0; - cmdbuf[9] = (fileLowPath.size << 14) | 0x2; + cmdbuf[9] = IPC_Desc_StaticBuffer(fileLowPath.size,0); cmdbuf[10] = (u32)fileLowPath.data; Result ret = 0; @@ -578,14 +579,14 @@ FSUSER_CreateDirectory(FS_archive archive, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08090182; + cmdbuf[0] = IPC_MakeHeader(0x809,6,2); // 0x8090182 cmdbuf[1] = 0; cmdbuf[2] = archive.handleLow; cmdbuf[3] = archive.handleHigh; cmdbuf[4] = dirLowPath.type; cmdbuf[5] = dirLowPath.size; cmdbuf[6] = 0; - cmdbuf[7] = (dirLowPath.size << 14) | 0x2; + cmdbuf[7] = IPC_Desc_StaticBuffer(dirLowPath.size,0); cmdbuf[8] = (u32)dirLowPath.data; Result ret = 0; @@ -640,7 +641,7 @@ FSUSER_RenameDirectory(FS_archive srcArchive, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x080A0244; + cmdbuf[0] = IPC_MakeHeader(0x80A,9,4); // 0x80A0244 cmdbuf[1] = 0; cmdbuf[2] = srcArchive.handleLow; cmdbuf[3] = srcArchive.handleHigh; @@ -650,9 +651,9 @@ FSUSER_RenameDirectory(FS_archive srcArchive, cmdbuf[7] = destArchive.handleHigh; cmdbuf[8] = destDirLowPath.type; cmdbuf[9] = destDirLowPath.size; - cmdbuf[10] = (srcDirLowPath.size << 14) | 0x402; + cmdbuf[10] = IPC_Desc_StaticBuffer(srcDirLowPath.size,1); cmdbuf[11] = (u32)srcDirLowPath.data; - cmdbuf[12] = (destDirLowPath.size << 14) | 0x802; + cmdbuf[12] = IPC_Desc_StaticBuffer(destDirLowPath.size,2); cmdbuf[13] = (u32)destDirLowPath.data; Result ret = 0; @@ -699,12 +700,12 @@ FSUSER_OpenDirectory(Handle *out, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x080B0102; + cmdbuf[0] = IPC_MakeHeader(0x80B,4,2); // 0x80B0102 cmdbuf[1] = archive.handleLow; cmdbuf[2] = archive.handleHigh; cmdbuf[3] = dirLowPath.type; cmdbuf[4] = dirLowPath.size; - cmdbuf[5] = (dirLowPath.size << 14) | 0x2; + cmdbuf[5] = IPC_Desc_StaticBuffer(dirLowPath.size,0); cmdbuf[6] = (u32)dirLowPath.data; Result ret = 0; @@ -753,11 +754,11 @@ FSUSER_OpenArchive(FS_archive *archive) u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x080C00C2; + cmdbuf[0] = IPC_MakeHeader(0x80C,3,2); // 0x80C00C2 cmdbuf[1] = archive->id; cmdbuf[2] = archive->lowPath.type; cmdbuf[3] = archive->lowPath.size; - cmdbuf[4] = (archive->lowPath.size << 14) | 0x2; + cmdbuf[4] = IPC_Desc_StaticBuffer(archive->lowPath.size,0); cmdbuf[5] = (u32)archive->lowPath.data; Result ret = 0; @@ -802,7 +803,7 @@ FSUSER_CloseArchive(FS_archive *archive) u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x080E0080; + cmdbuf[0] = IPC_MakeHeader(0x80E,2,0); // 0x80E0080 cmdbuf[1] = archive->handleLow; cmdbuf[2] = archive->handleHigh; @@ -849,7 +850,7 @@ FSUSER_GetSdmcArchiveResource(u32 *sectorSize, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08140000; + cmdbuf[0] = IPC_MakeHeader(0x814,0,0); // 0x8140000 Result ret = 0; if((ret = svcSendSyncRequest(fsuHandle))) @@ -906,7 +907,7 @@ FSUSER_GetNandArchiveResource(u32 *sectorSize, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08150000; + cmdbuf[0] = IPC_MakeHeader(0x815,0,0); // 0x8150000 Result ret = 0; if((ret = svcSendSyncRequest(fsuHandle))) @@ -954,7 +955,7 @@ FSUSER_IsSdmcDetected(u8 *detected) { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08170000; + cmdbuf[0] = IPC_MakeHeader(0x817,0,0); // 0x8170000 Result ret = 0; if((ret = svcSendSyncRequest(fsuHandle))) @@ -992,7 +993,7 @@ FSUSER_GetMediaType(u8* mediatype) { u32* cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08680000; + cmdbuf[0] = IPC_MakeHeader(0x868,0,0); // 0x8680000 Result ret = 0; if((ret = svcSendSyncRequest(fsuHandle))) @@ -1031,7 +1032,7 @@ FSUSER_IsSdmcWritable(u8 *writable) { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08180000; + cmdbuf[0] = IPC_MakeHeader(0x818,0,0); // 0x8180000 Result ret = 0; if((ret = svcSendSyncRequest(fsuHandle))) @@ -1069,7 +1070,7 @@ FSFILE_Close(Handle handle) { u32* cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08080000; + cmdbuf[0] = IPC_MakeHeader(0x808,0,0); // 0x8080000 Result ret = 0; if((ret = svcSendSyncRequest(handle))) @@ -1121,11 +1122,11 @@ FSFILE_Read(Handle handle, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x080200C2; + cmdbuf[0] = IPC_MakeHeader(0x802,3,2); // 0x80200C2 cmdbuf[1] = (u32)offset; cmdbuf[2] = (u32)(offset >> 32); cmdbuf[3] = size; - cmdbuf[4] = (size << 4) | 0xC; + cmdbuf[4] = IPC_Desc_Buffer(size,IPC_BUFFER_W); cmdbuf[5] = (u32)buffer; Result ret = 0; @@ -1189,12 +1190,12 @@ FSFILE_Write(Handle handle, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08030102; + cmdbuf[0] = IPC_MakeHeader(0x803,4,2); // 0x8030102 cmdbuf[1] = (u32)offset; cmdbuf[2] = (u32)(offset >> 32); cmdbuf[3] = size; cmdbuf[4] = flushFlags; - cmdbuf[5] = (size << 4) | 0xA; + cmdbuf[5] = IPC_Desc_Buffer(size,IPC_BUFFER_R); cmdbuf[6] = (u32)buffer; Result ret = 0; @@ -1237,7 +1238,7 @@ FSFILE_GetSize(Handle handle, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08040000; + cmdbuf[0] = IPC_MakeHeader(0x804,0,0); // 0x8040000 Result ret = 0; if((ret = svcSendSyncRequest(handle))) @@ -1279,7 +1280,7 @@ FSFILE_SetSize(Handle handle, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08050080; + cmdbuf[0] = IPC_MakeHeader(0x805,2,0); // 0x8050080 cmdbuf[1] = (u32)size; cmdbuf[2] = (u32)(size >> 32); @@ -1320,7 +1321,7 @@ FSFILE_GetAttributes(Handle handle, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08060000; + cmdbuf[0] = IPC_MakeHeader(0x806,0,0); // 0x8060000 Result ret = 0; if((ret = svcSendSyncRequest(handle))) @@ -1361,7 +1362,7 @@ FSFILE_SetAttributes(Handle handle, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08070040; + cmdbuf[0] = IPC_MakeHeader(0x807,1,0); // 0x8070040 cmdbuf[1] = attributes; Result ret = 0; @@ -1397,7 +1398,7 @@ FSFILE_Flush(Handle handle) { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08090000; + cmdbuf[0] = IPC_MakeHeader(0x809,0,0); // 0x8090000 Result ret = 0; if((ret = svcSendSyncRequest(handle))) @@ -1442,9 +1443,9 @@ FSDIR_Read(Handle handle, { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08010042; + cmdbuf[0] = IPC_MakeHeader(0x801,1,2); // 0x8010042 cmdbuf[1] = entryCount; - cmdbuf[2] = ((entryCount*0x228) << 4) | 0xC; + cmdbuf[2] = IPC_Desc_Buffer(entryCount*0x228,IPC_BUFFER_W); cmdbuf[3] = (u32)buffer; Result ret = 0; @@ -1483,7 +1484,7 @@ FSDIR_Close(Handle handle) { u32 *cmdbuf = getThreadCommandBuffer(); - cmdbuf[0] = 0x08020000; + cmdbuf[0] = IPC_MakeHeader(0x802,0,0); // 0x8020000 Result ret = 0; if((ret = svcSendSyncRequest(handle)))