diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-23 02:31:28 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-23 02:31:28 +0100 |
commit | dced7255ec86587b441dc2ac04a8fb268ac5b920 (patch) | |
tree | a5e5a37ea4729605a200cc7659d720a80802e1d6 /sys | |
parent | 2e6a5e704646109a7aaf7dd5a9d3a64475fd0055 (diff) |
libc: re-implement getuser() by stating /proc/$pid/status
The idea is to avoid the magic files that contain
per process information in devcons when possible.
It will make it easier to deprecate them in the future.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/man/2/getuser | 11 | ||||
-rw-r--r-- | sys/src/libc/9sys/getuser.c | 17 | ||||
-rw-r--r-- | sys/src/libc/9sys/mkfile | 1 | ||||
-rw-r--r-- | sys/src/libc/port/getuser.c | 21 | ||||
-rw-r--r-- | sys/src/libc/port/mkfile | 1 |
5 files changed, 24 insertions, 27 deletions
diff --git a/sys/man/2/getuser b/sys/man/2/getuser index e5aed07a6..121fdea37 100644 --- a/sys/man/2/getuser +++ b/sys/man/2/getuser @@ -18,22 +18,23 @@ null-terminated name of the user who owns the current process. .I Getuser -reads -.B /dev/user +stats the file +.BI /proc/ pid /status to find the name. .PP .I Sysname -provides the same service for the file -.BR #c/sysname , +reads the file +.BR /dev/sysname , which contains the name of the machine. Unlike .IR getuser , .I sysname caches the string, reading the file only once. .SH SOURCE -.B /sys/src/libc/port/getuser.c +.B /sys/src/libc/9sys/getuser.c .br .B /sys/src/libc/9sys/sysname.c .SH SEE ALSO .IR intro (2), +.IR proc (3), .IR cons (3) diff --git a/sys/src/libc/9sys/getuser.c b/sys/src/libc/9sys/getuser.c new file mode 100644 index 000000000..487a88aaf --- /dev/null +++ b/sys/src/libc/9sys/getuser.c @@ -0,0 +1,17 @@ +#include <u.h> +#include <libc.h> + +char * +getuser(void) +{ + static char user[64]; + char name[32]; + Dir *dir; + + snprint(name, sizeof(name), "/proc/%lud/status", (ulong)getpid()); + if((dir = dirstat(name)) == nil) + return "none"; + snprint(user, sizeof(user), "%s", dir->uid); + free(dir); + return user; +} diff --git a/sys/src/libc/9sys/mkfile b/sys/src/libc/9sys/mkfile index 686a7bd49..fe581f14b 100644 --- a/sys/src/libc/9sys/mkfile +++ b/sys/src/libc/9sys/mkfile @@ -24,6 +24,7 @@ OFILES=\ getenv.$O\ getpid.$O\ getppid.$O\ + getuser.$O\ getwd.$O\ idn.$O\ iounit.$O\ diff --git a/sys/src/libc/port/getuser.c b/sys/src/libc/port/getuser.c deleted file mode 100644 index ff3d2e2a1..000000000 --- a/sys/src/libc/port/getuser.c +++ /dev/null @@ -1,21 +0,0 @@ -#include <u.h> -#include <libc.h> - -char * -getuser(void) -{ - static char user[64]; - int fd; - int n; - - fd = open("/dev/user", OREAD|OCEXEC); - if(fd < 0) - return "none"; - n = read(fd, user, (sizeof user)-1); - close(fd); - if(n <= 0) - strcpy(user, "none"); - else - user[n] = 0; - return user; -} diff --git a/sys/src/libc/port/mkfile b/sys/src/libc/port/mkfile index 11aec6989..31c7c8c2d 100644 --- a/sys/src/libc/port/mkfile +++ b/sys/src/libc/port/mkfile @@ -32,7 +32,6 @@ CFILES=\ frexp.c\ getcallerpc.c\ getfields.c\ - getuser.c\ hangup.c\ hypot.c\ lnrand.c\ |