diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-23 02:32:13 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-23 02:32:13 +0100 |
commit | a7a08647b6d224425857834c34dffe4b49055acc (patch) | |
tree | 560f4e8ff21c430c9eb0b6592df19b6fde65b881 /sys/src | |
parent | dced7255ec86587b441dc2ac04a8fb268ac5b920 (diff) |
ape: re-implement getlogin() by stating /proc/$pid/status
Diffstat (limited to 'sys/src')
-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 * |