summaryrefslogtreecommitdiff
path: root/sys
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 /sys
parent2e6a5e704646109a7aaf7dd5a9d3a64475fd0055 (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/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\