diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-10-10 07:34:27 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-10-10 07:34:27 +0000 |
commit | 56104838733c81ba410ac41f767ac72267049489 (patch) | |
tree | 54057d78cdae893235b86787a735629396d857a5 /libc/pwd_grp/getspuid.c | |
parent | 61011662018fa98c4610c1ae826e417678cd5c80 (diff) |
Implement getgrgid_r and getgrnam_r. Rework group handling code to be fully
reentrant, since there was still a shared static value. indent stuff,
Diffstat (limited to 'libc/pwd_grp/getspuid.c')
-rw-r--r-- | libc/pwd_grp/getspuid.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/libc/pwd_grp/getspuid.c b/libc/pwd_grp/getspuid.c index b25fddb49..c97d186bd 100644 --- a/libc/pwd_grp/getspuid.c +++ b/libc/pwd_grp/getspuid.c @@ -1,5 +1,7 @@ +/* vi: set sw=4 ts=4: */ /* * getspuid.c - Based on getpwuid.c + * Copyright (C) 2001-2003 Erik Andersen <andersee@debian.org> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -37,34 +39,34 @@ static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER; int getspuid_r (uid_t uid, struct spwd *spwd, char *buff, size_t buflen, struct spwd **result) { - int ret; - char pwd_buff[PWD_BUFFER_SIZE]; - struct passwd password; + int ret; + char pwd_buff[PWD_BUFFER_SIZE]; + struct passwd password; - *result = NULL; - ret = getpwuid_r(uid, &password, pwd_buff, sizeof(pwd_buff), NULL); - if (ret != 0) - return ret; + *result = NULL; + ret = getpwuid_r(uid, &password, pwd_buff, sizeof(pwd_buff), NULL); + if (ret != 0) + return ret; - ret = getspnam_r(password.pw_name, spwd, buff, buflen, result); - *result = spwd; - return ret; + ret = getspnam_r(password.pw_name, spwd, buff, buflen, result); + *result = spwd; + return ret; } struct spwd *getspuid(uid_t uid) { - int ret; - static char line_buff[PWD_BUFFER_SIZE]; - static struct spwd spwd; - struct spwd *result; + int ret; + static char line_buff[PWD_BUFFER_SIZE]; + static struct spwd spwd; + struct spwd *result; - LOCK; - if ((ret=getspuid_r(uid, &spwd, line_buff, sizeof(line_buff), &result)) == 0) { + LOCK; + if ((ret=getspuid_r(uid, &spwd, line_buff, sizeof(line_buff), &result)) == 0) { + UNLOCK; + return &spwd; + } UNLOCK; - return &spwd; - } - UNLOCK; - __set_errno(ret); - return NULL; + __set_errno(ret); + return NULL; } |