X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibposix.so_src%2Funistd.c;h=78896db9e7cfb064f1f7a69605c0bb0ce3ae21e7;hb=edddd69f17803d29b7f435da85ef23b7a5430c1f;hp=57d71258069ffb9707eb0b482eb23fda766a4420;hpb=8695e2b9f65ab4411677d4eff57d0d80f6c26f9a;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libposix.so_src/unistd.c b/Usermode/Libraries/libposix.so_src/unistd.c index 57d71258..78896db9 100644 --- a/Usermode/Libraries/libposix.so_src/unistd.c +++ b/Usermode/Libraries/libposix.so_src/unistd.c @@ -10,6 +10,7 @@ #include #include #include +#include // === CODE === int unlink(const char *pathname) @@ -39,7 +40,12 @@ int open(const char *path, int openmode, ...) va_end(args); } - return _SysOpen(path, openflags, create_mode); + if( openmode & O_NONBLOCK ) + openflags |= OPENFLAG_NONBLOCK; + + int ret = _SysOpen(path, openflags, create_mode); + _SysDebug("open('%s', 0%o, 0%o) = %i", path, openmode, create_mode, ret); + return ret; } int creat(const char *path, mode_t mode) @@ -89,14 +95,18 @@ int execv(const char *b, char *v[]) int dup(int oldfd) { + _SysDebug("libposix: dup() does not share offsets/flags"); // NOTE: Acess's CopyFD doesn't cause offset sharing - // TODO: Check that -1 does cause a new allocation - return _SysCopyFD(oldfd, -1); + int ret = _SysCopyFD(oldfd, -1); + _SysDebug("dup(%i) = %i", oldfd, ret); + return ret; } int dup2(int oldfd, int newfd) { + _SysDebug("libposix: dup2() does not share offsets/flags"); // NOTE: Acess's CopyFD doesn't cause offset sharing + _SysDebug("dup2(%i,%i)", oldfd, newfd); return _SysCopyFD(oldfd, newfd); } @@ -134,18 +144,17 @@ int kill(pid_t pid, int signal) int select(int nfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *timeout) { - + long long int ltimeout = 0, *ltimeoutp = NULL; if( timeout ) { - long long int ltimeout = 0; ltimeout = timeout->tv_sec*1000 + timeout->tv_usec / 1000; - int ret = _SysSelect(nfd, rfd, wfd, efd, <imeout, 0); - return ret; - } - else - { - return _SysSelect(nfd, rfd, wfd, efd, NULL, 0); + ltimeoutp = <imeout; } + _SysDebug("select(%i,{0x%x},{0x%x},{0x%x},%lli)", + nfd, (rfd?rfd->flags[0]:0), (wfd?wfd->flags[0]:0), (efd?efd->flags[0]:0), + (ltimeoutp ? *ltimeoutp : -1) + ); + return _SysSelect(nfd, rfd, wfd, efd, ltimeoutp, 0); } int pipe(int pipefd[2]) @@ -153,6 +162,7 @@ int pipe(int pipefd[2]) pipefd[0] = _SysOpen("/Devices/fifo/anon", OPENFLAG_READ|OPENFLAG_WRITE); pipefd[1] = _SysCopyFD(pipefd[0], -1); _SysFDFlags(pipefd[1], OPENFLAG_READ|OPENFLAG_WRITE, OPENFLAG_WRITE); + _SysDebug("pipe({%i,%i})", pipefd[0], pipefd[1]); return 0; } @@ -173,6 +183,8 @@ char *getpass(const char *prompt) fprintf(stderr, "%s", prompt); fgets(passbuf, PASS_MAX+1, stdin); fprintf(stderr, "\n"); + for( int i = strlen(passbuf); i > 0 && (passbuf[i-1] == '\r' || passbuf[i-1] == '\n'); i -- ) + passbuf[i-1] = 0; return passbuf; }