summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-12-23 02:32:13 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2020-12-23 02:32:13 +0100
commita7a08647b6d224425857834c34dffe4b49055acc (patch)
tree560f4e8ff21c430c9eb0b6592df19b6fde65b881 /sys/src
parentdced7255ec86587b441dc2ac04a8fb268ac5b920 (diff)
ape: re-implement getlogin() by stating /proc/$pid/status
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/ape/lib/ap/plan9/getlogin.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/sys/src/ape/lib/ap/plan9/getlogin.c b/sys/src/ape/lib/ap/plan9/getlogin.c
index 8d2d51ce0..958a130bb 100644
--- a/sys/src/ape/lib/ap/plan9/getlogin.c
+++ b/sys/src/ape/lib/ap/plan9/getlogin.c
@@ -1,21 +1,24 @@
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
+#include "lib.h"
#include <unistd.h>
-#include <sys/limits.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "sys9.h"
+#include "dir.h"
char *
-getlogin_r(char *buf, int len)
+getlogin_r(char *user, int len)
{
- int f, n;
+ char name[32];
+ Dir *dir;
- f = open("/dev/user", O_RDONLY);
- if(f < 0)
- return 0;
- n = read(f, buf, len);
- buf[len-1] = 0;
- close(f);
- return (n>=0)? buf : 0;
+ snprintf(name, sizeof(name), "/proc/%d/status", getpid());
+ if((dir = _dirstat(name)) == nil){
+ _syserrno();
+ return NULL;
+ }
+ snprintf(user, len, "%s", dir->uid);
+ free(dir);
+ return user;
}
char *