xref: /inferno-os/lib9/getuser-posix.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth #include <pwd.h>
3*37da2899SCharles.Forsyth 
4*37da2899SCharles.Forsyth char*
getuser(void)5*37da2899SCharles.Forsyth getuser(void)
6*37da2899SCharles.Forsyth {
7*37da2899SCharles.Forsyth 	struct passwd *p;
8*37da2899SCharles.Forsyth 
9*37da2899SCharles.Forsyth 	static char *user = 0;
10*37da2899SCharles.Forsyth 
11*37da2899SCharles.Forsyth 	if (!user) {
12*37da2899SCharles.Forsyth 		p = getpwuid(getuid());
13*37da2899SCharles.Forsyth 		if (p && p->pw_name) {
14*37da2899SCharles.Forsyth 			user = malloc(strlen(p->pw_name)+1);
15*37da2899SCharles.Forsyth 			if (user)
16*37da2899SCharles.Forsyth 				strcpy(user, p->pw_name);
17*37da2899SCharles.Forsyth 		}
18*37da2899SCharles.Forsyth 	}
19*37da2899SCharles.Forsyth 	if(!user)
20*37da2899SCharles.Forsyth 		user = "unknown";
21*37da2899SCharles.Forsyth 	return user;
22*37da2899SCharles.Forsyth }
23