srv : mini-fix

FS : FSFILE_Write
This commit is contained in:
smea 2014-01-23 18:30:36 +01:00
parent dd36d587eb
commit 8dcc7e5cce
4 changed files with 25 additions and 2 deletions

View 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

View File

@ -16,6 +16,8 @@
typedef signed int s32;
typedef signed long long s64;
typedef u16 wchar;
typedef u32 Handle;
typedef u32 Result;

View 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();

View 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)