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 | |
parent | 2e6a5e704646109a7aaf7dd5a9d3a64475fd0055 (diff) | |
download | plan9front-dced7255ec86587b441dc2ac04a8fb268ac5b920.tar.xz |
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.
-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\ |