summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-12-23 02:31:28 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2020-12-23 02:31:28 +0100
commitdced7255ec86587b441dc2ac04a8fb268ac5b920 (patch)
treea5e5a37ea4729605a200cc7659d720a80802e1d6
parent2e6a5e704646109a7aaf7dd5a9d3a64475fd0055 (diff)
downloadplan9front-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/getuser11
-rw-r--r--sys/src/libc/9sys/getuser.c17
-rw-r--r--sys/src/libc/9sys/mkfile1
-rw-r--r--sys/src/libc/port/getuser.c21
-rw-r--r--sys/src/libc/port/mkfile1
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\