diff options
| -rw-r--r-- | sys/src/ape/lib/ap/plan9/getlogin.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/sys/src/ape/lib/ap/plan9/getlogin.c b/sys/src/ape/lib/ap/plan9/getlogin.c index 8d2d51ce0..958a130bb 100644 --- a/sys/src/ape/lib/ap/plan9/getlogin.c +++ b/sys/src/ape/lib/ap/plan9/getlogin.c @@ -1,21 +1,24 @@ -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> +#include "lib.h" #include <unistd.h> -#include <sys/limits.h> +#include <stdlib.h> +#include <stdio.h> +#include "sys9.h" +#include "dir.h" char * -getlogin_r(char *buf, int len) +getlogin_r(char *user, int len) { - int f, n; + char name[32]; + Dir *dir; - f = open("/dev/user", O_RDONLY); - if(f < 0) - return 0; - n = read(f, buf, len); - buf[len-1] = 0; - close(f); - return (n>=0)? buf : 0; + snprintf(name, sizeof(name), "/proc/%d/status", getpid()); + if((dir = _dirstat(name)) == nil){ + _syserrno(); + return NULL; + } + snprintf(user, len, "%s", dir->uid); + free(dir); + return user; } char * |
