]> Chaos Git - corbenik/ctrulib.git/commitdiff
srv : mini-fix
authorsmea <smealum@gmail.com>
Thu, 23 Jan 2014 17:30:36 +0000 (18:30 +0100)
committersmea <smealum@gmail.com>
Thu, 23 Jan 2014 17:30:36 +0000 (18:30 +0100)
FS : FSFILE_Write

libctru/include/ctr/FS.h
libctru/include/ctr/types.h
libctru/source/FS.c
libctru/source/srv.c

index 1881c1903c8b407373c311a434bb6f28668cc59d..73d9e64cc1dc49cf49ab21695ef45a393a912a31 100644 (file)
@@ -35,6 +35,7 @@ Result FSUSER_OpenFile(Handle handle, Handle* out, u32 archiveid, FS_archive arc
 
 Result FSFILE_Close(Handle handle);
 Result FSFILE_Read(Handle handle, u32 *bytesRead, u64 offset, u32 *buffer, u32 size);
+Result FSFILE_Write(Handle handle, u32 *bytesWritten, u64 offset, u32 *buffer, u32 size, u32 flushFlags);
 Result FSFILE_GetSize(Handle handle, u64 *size);
 
 #endif
index 951bbb4b6c290e45c64fb6182d22d0f4c4e24f08..b3b49878d65933410a222cf124dc3d2962fa1df3 100644 (file)
@@ -16,6 +16,8 @@
        typedef signed int s32;
        typedef signed long long s64;
 
+       typedef u16 wchar;
+
        typedef u32 Handle;
        typedef u32 Result;
 
index d5ffe6594a0d705ba824e5b07d395bf0e0c4a05c..06df4435996365bc0736d34390c20018ccf58aad 100644 (file)
@@ -66,7 +66,6 @@ Result FSFILE_Read(Handle handle, u32 *bytesRead, u64 offset, u32 *buffer, u32 s
        cmdbuf[4]=(size<<4)|12;
        cmdbuf[5]=(u32)buffer;
  
        Result ret=0;
        if((ret=svc_sendSyncRequest(handle)))return ret;
 
@@ -75,6 +74,27 @@ Result FSFILE_Read(Handle handle, u32 *bytesRead, u64 offset, u32 *buffer, u32 s
        return cmdbuf[1];
 }
 
+//WARNING : using wrong flushFlags CAN corrupt the archive you're writing to
+Result FSFILE_Write(Handle handle, u32 *bytesWritten, u64 offset, u32 *buffer, u32 size, u32 flushFlags)
+{
+       u32 *cmdbuf=getThreadCommandBuffer();
+
+       cmdbuf[0]=0x08030102;
+       cmdbuf[1]=(u32)offset;
+       cmdbuf[2]=(u32)(offset>>32);
+       cmdbuf[3]=size;
+       cmdbuf[4]=flushFlags;
+       cmdbuf[5]=(size<<4)|12;
+       cmdbuf[6]=(u32)buffer;
+
+       Result ret=0;
+       if((ret=svc_sendSyncRequest(handle)))return ret;
+
+       if(bytesWritten)*bytesWritten=cmdbuf[2];
+
+       return cmdbuf[1];
+}
+
 Result FSFILE_GetSize(Handle handle, u64 *size)
 {
        u32 *cmdbuf=getThreadCommandBuffer();
index 1fee4136487010d076d346cc9a6720210f638efa..d2bad416358cb3e816f56436fce6424b8ddb5ea5 100644 (file)
@@ -19,7 +19,7 @@ void getSrvHandle(Handle* out)
        if(!out)return;
 
        svc_connectToPort(out, "srv:");
-       srv_10002(*out);
+       srv_Initialize(*out);
 }
 
 void srv_getServiceHandle(Handle handle, Handle* out, char* server)