#define _GNU_SOURCE | |
#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 (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; | |
} |