diff options
author | Glenn L McGrath | 2004-09-15 03:04:08 +0000 |
---|---|---|
committer | Glenn L McGrath | 2004-09-15 03:04:08 +0000 |
commit | f15dfc557048ca28c8b71ecbcfb9b8f229f2e2e0 (patch) | |
tree | f34d5e6241ef8f0a1a95502128789b2edd2c1a71 /libbb/my_getgrgid.c | |
parent | 995d96a99d5f2d546d5e15b2614ae7408da27631 (diff) | |
download | busybox-f15dfc557048ca28c8b71ecbcfb9b8f229f2e2e0.zip busybox-f15dfc557048ca28c8b71ecbcfb9b8f229f2e2e0.tar.gz |
Tito writes,
"This patch fixes all the bugs in id previously spotted by vodz and me.
The binary size increased a bit, but now it should work as expected."
Diffstat (limited to 'libbb/my_getgrgid.c')
-rw-r--r-- | libbb/my_getgrgid.c | 46 |
1 files changed, 13 insertions, 33 deletions
diff --git a/libbb/my_getgrgid.c b/libbb/my_getgrgid.c index 8c53096..9ac14a3 100644 --- a/libbb/my_getgrgid.c +++ b/libbb/my_getgrgid.c @@ -22,48 +22,28 @@ /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more * flexible : * - * if bufsize is > 0 char *group cannot be set to NULL - * on success groupname is written on static allocated buffer - * on failure gid as string is written to buffer and NULL is returned - * if bufsize is = 0 char *group can be set to NULL - * on success groupname is returned - * on failure NULL is returned - * if bufsize is < 0 char *group can be set to NULL - * on success groupname is returned - * on failure an error message is printed and the program exits + * if bufsize is > 0 char *group cannot be set to NULL. + * On success groupname is written on static allocated buffer group + * (and a pointer to it is returned). + * On failure gid as string is written to static allocated buffer + * group and NULL is returned. + * if bufsize is = 0 char *group can be set to NULL. + * On success groupname is returned. + * On failure NULL is returned. + * if bufsize is < 0 char *group can be set to NULL. + * On success groupname is returned. + * On failure an error message is printed and the program exits. */ -#include <stdio.h> -#include <string.h> -#include <assert.h> #include "libbb.h" -#include "pwd_.h" #include "grp_.h" - /* gets a groupname given a gid */ char * my_getgrgid(char *group, long gid, int bufsize) { - struct group *mygroup; + struct group *mygroup = getgrgid(gid); - mygroup = getgrgid(gid); - if (mygroup==NULL) { - if(bufsize > 0) { - assert(group != NULL); - snprintf(group, bufsize, "%ld", (long)gid); - } - if( bufsize < 0 ) { - bb_error_msg_and_die("unknown gid %ld", (long)gid); - } - return NULL; - } else { - if(bufsize > 0) - { - assert(group != NULL); - return safe_strncpy(group, mygroup->gr_name, bufsize); - } - return mygroup->gr_name; - } + return my_getug(group, (mygroup) ? mygroup->gr_name : (char *)mygroup, gid, bufsize, 'g'); } |