]> Chaos Git - corbenik/ctrulib.git/commitdiff
fsInit, fsExit
authorsmea <smealum@gmail.com>
Sun, 17 Aug 2014 00:11:13 +0000 (17:11 -0700)
committersmea <smealum@gmail.com>
Sun, 17 Aug 2014 00:11:13 +0000 (17:11 -0700)
libctru/include/3ds/FS.h
libctru/source/services/fs.c

index 7073fefdf547bc94d3b5c37fb2e8fb4dcce82892..8fcef07a5c6032c6af03cb0a941dc8ee42e0ee37 100644 (file)
@@ -36,12 +36,15 @@ static inline FS_path FS_makePath(FS_pathType type, char* path)
        return (FS_path){type, strlen(path)+1, (u8*)path};
 }
 
-Result FSUSER_Initialize(Handle handle);
-Result FSUSER_OpenArchive(Handle handle, FS_archive* archive);
-Result FSUSER_OpenDirectory(Handle handle, Handle* out, FS_archive archive, FS_path dirLowPath);
-Result FSUSER_OpenFile(Handle handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes);
-Result FSUSER_OpenFileDirectly(Handle handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes);
-Result FSUSER_CloseArchive(Handle handle, FS_archive* archive);
+Result fsInit(void);
+Result fsExit(void);
+
+Result FSUSER_Initialize(Handle* handle);
+Result FSUSER_OpenArchive(Handle* handle, FS_archive* archive);
+Result FSUSER_OpenDirectory(Handle* handle, Handle* out, FS_archive archive, FS_path dirLowPath);
+Result FSUSER_OpenFile(Handle* handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes);
+Result FSUSER_OpenFileDirectly(Handle* handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes);
+Result FSUSER_CloseArchive(Handle* handle, FS_archive* archive);
 
 Result FSFILE_Close(Handle handle);
 Result FSFILE_Read(Handle handle, u32 *bytesRead, u64 offset, u32 *buffer, u32 size);
index 701553fff54d0c9824cc2217a1e1019a062cea24..08e3719a4ba42ba8739edcf05a7334c0c477b9aa 100644 (file)
@@ -1,23 +1,37 @@
 #include <string.h>
 #include <3ds/types.h>
 #include <3ds/FS.h>
+#include <3ds/srv.h>
 #include <3ds/svc.h>
 
+Handle fsuHandle;
 
-Result FSUSER_Initialize(Handle handle)
+Result fsInit(void)
 {
+       return srvGetServiceHandle(&fsuHandle, "fs:USER");
+}
+
+Result fsExit(void)
+{
+       return svcCloseHandle(fsuHandle);
+}
+
+Result FSUSER_Initialize(Handle* handle)
+{
+       if(!handle)handle=&fsuHandle;
        u32* cmdbuf=getThreadCommandBuffer();
        cmdbuf[0]=0x08010002; //request header code
        cmdbuf[1]=32;
        
        Result ret=0;
-       if((ret=svcSendSyncRequest(handle)))return ret;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
        
        return cmdbuf[1];
 }
 
-Result FSUSER_OpenFile(Handle handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes) //archive needs to have been opened
+Result FSUSER_OpenFile(Handle* handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes) //archive needs to have been opened
 {
+       if(!handle)handle=&fsuHandle;
        u32* cmdbuf=getThreadCommandBuffer();
 
        cmdbuf[0]=0x080201C2;
@@ -32,15 +46,16 @@ Result FSUSER_OpenFile(Handle handle, Handle* out, FS_archive archive, FS_path f
        cmdbuf[9]=(u32)fileLowPath.data;
  
        Result ret=0;
-       if((ret=svcSendSyncRequest(handle)))return ret;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
  
        if(out)*out=cmdbuf[3];
  
        return cmdbuf[1];
 }
 
-Result FSUSER_OpenFileDirectly(Handle handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes) //no need to have archive opened
+Result FSUSER_OpenFileDirectly(Handle* handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes) //no need to have archive opened
 {
+       if(!handle)handle=&fsuHandle;
        u32* cmdbuf=getThreadCommandBuffer();
 
        cmdbuf[0]=0x08030204;
@@ -58,16 +73,17 @@ Result FSUSER_OpenFileDirectly(Handle handle, Handle* out, FS_archive archive, F
        cmdbuf[12]=(u32)fileLowPath.data;
  
        Result ret=0;
-       if((ret=svcSendSyncRequest(handle)))return ret;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
  
        if(out)*out=cmdbuf[3];
  
        return cmdbuf[1];
 }
 
-Result FSUSER_OpenArchive(Handle handle, FS_archive* archive)
+Result FSUSER_OpenArchive(Handle* handle, FS_archive* archive)
 {
        if(!archive)return -2;
+       if(!handle)handle=&fsuHandle;
        u32* cmdbuf=getThreadCommandBuffer();
 
        cmdbuf[0]=0x080C00C2;
@@ -78,7 +94,7 @@ Result FSUSER_OpenArchive(Handle handle, FS_archive* archive)
        cmdbuf[5]=(u32)archive->lowPath.data;
  
        Result ret=0;
-       if((ret=svcSendSyncRequest(handle)))return ret;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
  
        archive->handleLow=cmdbuf[2];
        archive->handleHigh=cmdbuf[3];
@@ -86,8 +102,9 @@ Result FSUSER_OpenArchive(Handle handle, FS_archive* archive)
        return cmdbuf[1];
 }
 
-Result FSUSER_OpenDirectory(Handle handle, Handle* out, FS_archive archive, FS_path dirLowPath)
+Result FSUSER_OpenDirectory(Handle* handle, Handle* out, FS_archive archive, FS_path dirLowPath)
 {
+       if(!handle)handle=&fsuHandle;
        u32* cmdbuf=getThreadCommandBuffer();
 
        cmdbuf[0]=0x080B0102;
@@ -99,16 +116,17 @@ Result FSUSER_OpenDirectory(Handle handle, Handle* out, FS_archive archive, FS_p
        cmdbuf[6]=(u32)dirLowPath.data;
  
        Result ret=0;
-       if((ret=svcSendSyncRequest(handle)))return ret;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
  
        if(out)*out=cmdbuf[3];
  
        return cmdbuf[1];
 }
 
-Result FSUSER_CloseArchive(Handle handle, FS_archive* archive)
+Result FSUSER_CloseArchive(Handle* handle, FS_archive* archive)
 {
        if(!archive)return -2;
+       if(!handle)handle=&fsuHandle;
        u32* cmdbuf=getThreadCommandBuffer();
 
        cmdbuf[0]=0x080E0080;
@@ -116,7 +134,7 @@ Result FSUSER_CloseArchive(Handle handle, FS_archive* archive)
        cmdbuf[2]=archive->handleLow;
  
        Result ret=0;
-       if((ret=svcSendSyncRequest(handle)))return ret;
+       if((ret=svcSendSyncRequest(*handle)))return ret;
  
        return cmdbuf[1];
 }