forked from enlightenment/edi
create: Replace user lookup with a more efficient implementation
This commit is contained in:
parent
de04dec6c0
commit
632ed0aa11
|
@ -234,23 +234,33 @@ static int
|
|||
_edi_welcome_user_fullname_get(const char *username, char *fullname, size_t max)
|
||||
{
|
||||
struct passwd *p;
|
||||
size_t n;
|
||||
char *pos;
|
||||
unsigned int n;
|
||||
|
||||
if (!username)
|
||||
return 0;
|
||||
return -1;
|
||||
|
||||
errno = 0;
|
||||
p = getpwnam(username);
|
||||
if (p == NULL && errno == 0)
|
||||
if (p == NULL || max == 0)
|
||||
{
|
||||
if (errno == 0)
|
||||
return 0;
|
||||
if (p == NULL)
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
n = strcspn(p->pw_gecos, ",");
|
||||
if (max == 0 || n <= 0)
|
||||
pos = strchr(p->pw_gecos, ',');
|
||||
if (!pos)
|
||||
n = strlen(p->pw_gecos);
|
||||
else
|
||||
n = pos - p->pw_gecos;
|
||||
|
||||
if (n == 0)
|
||||
return 0;
|
||||
if (n > max - 1)
|
||||
n = max - 1;
|
||||
|
||||
memcpy(fullname, p->pw_gecos, n);
|
||||
fullname[n] = '\0';
|
||||
return 1;
|
||||
|
|
Loading…
Reference in New Issue