AcessNative - Possible fix to ioctl() bugs
authorJohn Hodge <[email protected]>
Sun, 11 Mar 2012 06:43:18 +0000 (14:43 +0800)
committerJohn Hodge <[email protected]>
Sun, 11 Mar 2012 06:43:18 +0000 (14:43 +0800)
AcessNative/acesskernel_src/threads.c
AcessNative/ld-acess_src/exports.c

index a2a5898..71fa294 100644 (file)
@@ -50,7 +50,7 @@ typedef struct sProcess
         int    MaxFD;
 } tProcess;
 
-typedef struct sThread
+struct sThread
 {
        struct sThread  *GlobalNext;
        struct sThread  *Next;
@@ -82,7 +82,7 @@ typedef struct sThread
        Uint32  Events, WaitMask;
        SDL_sem *EventSem;
 
-}      tThread;
+};
 
 // === PROTOTYPES ===
  int   Threads_Wake(tThread *Thread);
index 0c87bda..c236b52 100644 (file)
@@ -12,6 +12,7 @@
 #include <stddef.h>
 
 #define DEBUG(v...)    Debug(v)
+#define PAGE_SIZE      4096
 
 typedef struct sFILE   FILE;
 
@@ -93,9 +94,14 @@ uint64_t acess_tell(int FD) {
 }
 
 int acess_ioctl(int fd, int id, void *data) {
+        int    len;
        // NOTE: 1024 byte size is a hack
        DEBUG("ioctl(%i, %i, %p)", fd, id, data);
-       return _Syscall(SYS_IOCTL, ">i >i ?d", fd, id, 1024, data);
+       if( data == NULL )
+               len = 0;
+       else
+               len = PAGE_SIZE - ((uintptr_t)data % PAGE_SIZE);
+       return _Syscall(SYS_IOCTL, ">i >i ?d", fd, id, len, data);
 }
 int acess_finfo(int fd, t_sysFInfo *info, int maxacls) {
 //     DEBUG("offsetof(size, t_sysFInfo) = %i", offsetof(t_sysFInfo, size));

UCC git Repository :: git.ucc.asn.au