From dced7255ec86587b441dc2ac04a8fb268ac5b920 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Wed, 23 Dec 2020 02:31:28 +0100 Subject: [PATCH] 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. --- sys/man/2/getuser | 11 ++++++----- sys/src/libc/9sys/getuser.c | 17 +++++++++++++++++ sys/src/libc/9sys/mkfile | 1 + sys/src/libc/port/getuser.c | 21 --------------------- sys/src/libc/port/mkfile | 1 - 5 files changed, 24 insertions(+), 27 deletions(-) create mode 100644 sys/src/libc/9sys/getuser.c delete mode 100644 sys/src/libc/port/getuser.c 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 +#include + +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 -#include - -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\