X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Fsyscalls.c;h=546095612b70875b86a9ff91eb6fc267ebbd7f43;hb=4cbfb47ebf71128b57cf25a131550b3f66a295a3;hp=2a63622afcb7d1a7524b2d48a4855839366a1ce3;hpb=7f80ab30017689efe0aaaab18abc7ceda689d859;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/syscalls.c b/AcessNative/ld-acess_src/syscalls.c index 2a63622a..54609561 100644 --- a/AcessNative/ld-acess_src/syscalls.c +++ b/AcessNative/ld-acess_src/syscalls.c @@ -12,7 +12,7 @@ #include "request.h" #include "../syscalls.h" -#define DEBUG(x...) printf(x) +#define DEBUG(str, x...) Debug(str, x) #define NATIVE_FILE_MASK 0x40000000 #define MAX_FPS 16 @@ -59,7 +59,7 @@ const char *ReadEntry(tRequestValue *Dest, void *DataDest, void **PtrDest, const case 'i': if( direction != 1 ) { - fprintf(stderr, "ReadEntry: Recieving an integer is not defined\n"); + Warning("ReadEntry: Recieving an integer is not defined"); return NULL; } @@ -271,12 +271,17 @@ uint64_t _Syscall(int SyscallID, const char *ArgTypes, ...) free( req ); free( retPtrs ); - printf("Return %llx\n", retValue); + DEBUG(": %llx", retValue); return retValue; } // --- VFS Calls +int acess_chdir(const char *Path) +{ + return _Syscall(SYS_CHDIR, ">s", Path); +} + int acess_open(const char *Path, int Flags) { if( strncmp(Path, "$$$$", 4) == 0 ) @@ -289,7 +294,7 @@ int acess_open(const char *Path, int Flags) if(!gaSyscall_LocalFPs[ret]) return -1; return ret|NATIVE_FILE_MASK; } - DEBUG("open(\"%s\", 0x%x)\n", Path, Flags); + DEBUG("open(\"%s\", 0x%x)", Path, Flags); return _Syscall(SYS_OPEN, ">s >i", Path, Flags); } @@ -299,26 +304,26 @@ void acess_close(int FD) { gaSyscall_LocalFPs[FD & (NATIVE_FILE_MASK-1)] = NULL; return ; } - DEBUG("close(%i)\n", FD); + DEBUG("close(%i)", FD); _Syscall(SYS_CLOSE, ">i", FD); } int acess_reopen(int FD, const char *Path, int Flags) { - DEBUG("reopen(0x%x, \"%s\", 0x%x)\n", FD, Path, Flags); + DEBUG("reopen(0x%x, \"%s\", 0x%x)", FD, Path, Flags); return _Syscall(SYS_REOPEN, ">i >s >i", FD, Path, Flags); } size_t acess_read(int FD, size_t Bytes, void *Dest) { if(FD & NATIVE_FILE_MASK) return fread( Dest, Bytes, 1, gaSyscall_LocalFPs[FD & (NATIVE_FILE_MASK-1)] ); - DEBUG("read(0x%x, 0x%x, *%p)\n", FD, Bytes, Dest); + DEBUG("read(0x%x, 0x%x, *%p)", FD, Bytes, Dest); return _Syscall(SYS_READ, ">i >i i >i >d", FD, Bytes, Bytes, Src); } @@ -332,7 +337,7 @@ int acess_seek(int FD, int64_t Ofs, int Dir) { } return fseek( gaSyscall_LocalFPs[FD & (NATIVE_FILE_MASK-1)], Ofs, Dir ); } - DEBUG("seek(0x%x, 0x%llx, %i)\n", FD, Ofs, Dir); + DEBUG("seek(0x%x, 0x%llx, %i)", FD, Ofs, Dir); return _Syscall(SYS_SEEK, ">i >I >i", FD, Ofs, Dir); } @@ -344,6 +349,7 @@ uint64_t acess_tell(int FD) { int acess_ioctl(int fd, int id, void *data) { // 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); } int acess_finfo(int fd, t_sysFInfo *info, int maxacls) { @@ -354,9 +360,21 @@ int acess_finfo(int fd, t_sysFInfo *info, int maxacls) { } int acess_readdir(int fd, char *dest) { + DEBUG("readdir(%i, %p)", fd, dest); return _Syscall(SYS_READDIR, ">i i ?d ?d ?d >d", nfds, + read ? (nfds+7)/8 : 0, read, + write ? (nfds+7)/8 : 0, write, + error ? (nfds+7)/8 : 0, error, + sizeof(*timeout), timeout + ); +} + int acess__SysOpenChild(int fd, char *name, int flags) { return _Syscall(SYS_OPENCHILD, ">i >s >i", fd, name, flags); } @@ -372,6 +390,7 @@ int acess__SysMount(const char *Device, const char *Directory, const char *Type, // --- Error Handler int acess__SysSetFaultHandler(int (*Handler)(int)) { + printf("TODO: Set fault handler (asked to set to %p)\n", Handler); return 0; } @@ -390,9 +409,9 @@ int acess_clone(int flags, void *stack) extern int fork(void); if(flags & CLONE_VM) { int ret, newID, kernel_tid=0; - printf("fork()\n"); + printf("fork()"); - newID = _Syscall(SYS_FORK, "i i i", ID); } +int acess_SysSendMessage(int DestTID, int Length, void *Data) +{ + return _Syscall(SYS_SENDMSG, ">i >d", DestTID, Length, Data); +} + +int acess_SysGetMessage(int *SourceTID, void *Data) +{ + return _Syscall(SYS_GETMSG, "i", Status); exit(Status); } @@ -490,6 +523,7 @@ void acess__exit(int Status) const tSym caBuiltinSymbols[] = { DEFSYM(_exit), + DEFSYM(chdir), DEFSYM(open), DEFSYM(close), DEFSYM(reopen), @@ -500,6 +534,7 @@ const tSym caBuiltinSymbols[] = { DEFSYM(ioctl), DEFSYM(finfo), DEFSYM(readdir), + DEFSYM(select), DEFSYM(_SysOpenChild), DEFSYM(_SysGetACL), DEFSYM(_SysMount), @@ -511,6 +546,9 @@ const tSym caBuiltinSymbols[] = { DEFSYM(waittid), DEFSYM(setuid), DEFSYM(setgid), + + DEFSYM(SysSendMessage), + DEFSYM(SysGetMessage), DEFSYM(_SysAllocate), DEFSYM(_SysDebug),