X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Fexports.c;h=0c87bda674ef882eae453f55e7928a90d797fd8a;hb=a41f3e5efdf853726d078dc03550de40e9d63bdd;hp=0c1a671b55e22b5f3ca6fbee53c5a8fa9821021d;hpb=a4d8188f730bcc25cd4a6f4799ac7d65eb707cf2;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/exports.c b/AcessNative/ld-acess_src/exports.c index 0c1a671b..0c87bda6 100644 --- a/AcessNative/ld-acess_src/exports.c +++ b/AcessNative/ld-acess_src/exports.c @@ -9,6 +9,7 @@ #include "../syscalls.h" #include "exports.h" #include +#include #define DEBUG(v...) Debug(v) @@ -22,7 +23,11 @@ extern int sprintf(char *,const char *, ...); extern int vprintf(const char *, va_list); extern int strncmp(const char *, const char *, size_t); +extern int gSocket; extern int giSyscall_ClientID; // Needed for execve +extern void _InitSyscalls(void); +extern void _CloseSyscalls(void); + extern void Debug(const char *Format, ...); extern int AllocateMemory(uintptr_t VirtAddr, size_t ByteCount); @@ -93,7 +98,7 @@ int acess_ioctl(int fd, int id, void *data) { return _Syscall(SYS_IOCTL, ">i >i ?d", fd, id, 1024, data); } int acess_finfo(int fd, t_sysFInfo *info, int maxacls) { - DEBUG("offsetof(size, t_sysFInfo) = %i", offsetof(t_sysFInfo, size)); +// DEBUG("offsetof(size, t_sysFInfo) = %i", offsetof(t_sysFInfo, size)); DEBUG("finfo(%i, %p, %i)", fd, info, maxacls); return _Syscall(SYS_FINFO, ">i i", fd, @@ -107,17 +112,24 @@ int acess_readdir(int fd, char *dest) { return _Syscall(SYS_READDIR, ">i i ?d ?d ?d >d", nfds, + DEBUG("_SysSelect(%i, %p, %p, %p, %p, 0x%x)", nfds, read, write, error, timeout, events); + return _Syscall(SYS_SELECT, ">i ?d ?d ?d >d >i", nfds, read ? (nfds+7)/8 : 0, read, write ? (nfds+7)/8 : 0, write, error ? (nfds+7)/8 : 0, error, - sizeof(*timeout), timeout + sizeof(*timeout), timeout, + events ); } +int acess_select(int nfds, fd_set *read, fd_set *write, fd_set *error, time_t *timeout) +{ + return acess__SysSelect(nfds, read, write, error, timeout, 0); +} + + int acess__SysOpenChild(int fd, char *name, int flags) { return _Syscall(SYS_OPENCHILD, ">i >s >i", fd, name, flags); } @@ -152,14 +164,18 @@ int acess_clone(int flags, void *stack) extern int fork(void); if(flags & CLONE_VM) { int ret, newID, kernel_tid=0; - printf("fork()"); + printf("USERSIDE fork()\n"); - newID = _Syscall(SYS_FORK, "i i", ID); -} - -int acess_setgid(int ID) -{ - return _Syscall(SYS_SETGID, ">i", ID); -} +int acess_setuid(int ID) { return _Syscall(SYS_SETUID, ">i", ID); } +int acess_setgid(int ID) { return _Syscall(SYS_SETGID, ">i", ID); } +int acess_gettid(void) { return _Syscall(SYS_GETTID, ""); } +int acess_getpid(void) { return _Syscall(SYS_GETPID, ""); } +int acess_getuid(void) { return _Syscall(SYS_GETUID, ""); } +int acess_getgid(void) { return _Syscall(SYS_GETGID, ""); } int acess_SysSendMessage(int DestTID, int Length, void *Data) { @@ -281,6 +305,7 @@ const tSym caBuiltinSymbols[] = { DEFSYM(_SysOpenChild), DEFSYM(_SysGetACL), DEFSYM(_SysMount), + DEFSYM(_SysSelect), DEFSYM(clone), DEFSYM(execve), @@ -289,6 +314,7 @@ const tSym caBuiltinSymbols[] = { DEFSYM(waittid), DEFSYM(setuid), DEFSYM(setgid), + DEFSYM(gettid), DEFSYM(SysSendMessage), DEFSYM(SysGetMessage),