From 56104838733c81ba410ac41f767ac72267049489 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Fri, 10 Oct 2003 07:34:27 +0000 Subject: Implement getgrgid_r and getgrnam_r. Rework group handling code to be fully reentrant, since there was still a shared static value. indent stuff, --- libc/pwd_grp/getspnam.c | 54 +++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 26 deletions(-) (limited to 'libc/pwd_grp/getspnam.c') diff --git a/libc/pwd_grp/getspnam.c b/libc/pwd_grp/getspnam.c index f0a4155bf..2b1d4c95c 100644 --- a/libc/pwd_grp/getspnam.c +++ b/libc/pwd_grp/getspnam.c @@ -1,5 +1,7 @@ +/* vi: set sw=4 ts=4: */ /* * getspnam.c - Based on getpwnam.c + * Copyright (C) 2001-2003 Erik Andersen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -37,41 +39,41 @@ static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER; int getspnam_r (const char *name, struct spwd *spwd, char *buff, size_t buflen, struct spwd **result) { - int spwd_fd; + int spwd_fd; - if (name == NULL) { - return EINVAL; - } + if (name == NULL) { + return EINVAL; + } - if ((spwd_fd = open(_PATH_SHADOW, O_RDONLY)) < 0) - return errno; + if ((spwd_fd = open(_PATH_SHADOW, O_RDONLY)) < 0) + return errno; - *result = NULL; - while (__getspent_r(spwd, buff, buflen, spwd_fd) == 0) - if (!strcmp(spwd->sp_namp, name)) { - close(spwd_fd); - *result = spwd; - return 0; - } + *result = NULL; + while (__getspent_r(spwd, buff, buflen, spwd_fd) == 0) + if (!strcmp(spwd->sp_namp, name)) { + close(spwd_fd); + *result = spwd; + return 0; + } - close(spwd_fd); - return EINVAL; + close(spwd_fd); + return EINVAL; } struct spwd *getspnam(const char *name) { - 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=getspnam_r(name, &spwd, line_buff, sizeof(line_buff), &result)) == 0) { + LOCK; + if ((ret=getspnam_r(name, &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; } -- cgit v1.2.3