diff options
Diffstat (limited to 'src/legacy/cuserid.c')
| -rw-r--r-- | src/legacy/cuserid.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/src/legacy/cuserid.c b/src/legacy/cuserid.c index 4e78798d..dcaf73d4 100644 --- a/src/legacy/cuserid.c +++ b/src/legacy/cuserid.c @@ -2,13 +2,21 @@  #include <pwd.h>  #include <stdio.h>  #include <unistd.h> +#include <string.h>  char *cuserid(char *buf)  { +	static char usridbuf[L_cuserid];  	struct passwd pw, *ppw;  	long pwb[256]; -	if (getpwuid_r(geteuid(), &pw, (void *)pwb, sizeof pwb, &ppw)) -		return 0; -	snprintf(buf, L_cuserid, "%s", pw.pw_name); +	if (buf) *buf = 0; +	getpwuid_r(geteuid(), &pw, (void *)pwb, sizeof pwb, &ppw); +	if (!ppw) +		return buf; +	size_t len = strnlen(pw.pw_name, L_cuserid); +	if (len == L_cuserid) +		return buf; +	if (!buf) buf = usridbuf; +	memcpy(buf, pw.pw_name, len+1);  	return buf;  }  | 
