[RFC] clean up bb_pwd.c

Tito farmatito at tiscali.it
Wed Nov 5 13:22:35 UTC 2008


Hi,
i'm trying to create a cleaner api in bb_pwd.c by removing
bb_getgrgid, bb_getpwuid and bb_getug and substituting
them with these functions:

struct passwd* FAST_FUNC xgetpwuid(uid_t uid)
{
	struct passwd *pw = getpwuid(uid);
	if (!pw)
		bb_error_msg_and_die("unknown uid %u", uid);
	return pw;
}

char* FAST_FUNC xuid2uname(uid_t uid)
{
	struct passwd *pw = xgetpwuid(uid);
	return pw->pw_name;
}

char* FAST_FUNC uid2uname(uid_t uid)
{
	struct passwd *pw = getpwuid(uid);
	return (pw) ? pw->pw_name : NULL;
}

char* FAST_FUNC uid2uname_utoa(uid_t uid)
{
	char *name = uid2uname(uid);
	return (name) ? name : utoa(uid);
}

struct group* FAST_FUNC xgetgrgid(gid_t gid)
{
	struct group *gr = getgrgid(gid);
	if (!gr)
		bb_error_msg_and_die("unknown gid %u", gid);
	return gr;
}

char* FAST_FUNC xgid2group(gid_t gid)
{
	struct group *gr = xgetgrgid(gid);
	return gr->gr_name;
}

char* FAST_FUNC gid2group(gid_t gid)
{
	struct group *gr = getgrgid(gid);
	return (gr) ? gr->gr_name : NULL;
}

char* FAST_FUNC gid2group_utoa(gid_t gid)
{
	char *name = gid2group(gid);
	return (name) ? name : utoa(gid);
}

At a first glance after replacing  all the old functions
there is also a size reduction:

scripts/bloat-o-meter busybox_old busybox_unstripped
function                                             old     new   delta
xgetpwuid                                              -      27     +27
uid2uname_utoa                                         -      22     +22
gid2group_utoa                                         -      22     +22
uid2uname                                              -      18     +18
gid2group                                              -      18     +18
print_user                                            12      24     +12
print_group                                           12      24     +12
find_main                                            406     418     +12
get_cached                                            89      99     +10
xuid2uname                                             -       8      +8
bbunpack                                             440     448      +8
display_speed                                         85      90      +5
parse_command                                       1460    1463      +3
pack_gzip                                           1660    1658      -2
compare_keys                                         737     735      -2
.rodata                                           117358  117356      -2
whoami_main                                           50      43      -7
sendmail_main                                       1486    1479      -7
lpqr_main                                           1149    1142      -7
passwd_main                                         1053    1043     -10
print_common                                         121     107     -14
logger_main                                          410     394     -16
vlock_main                                           431     412     -19
sulogin_main                                         509     489     -20
crontab_main                                         642     609     -33
bb_getpwuid                                           42       -     -42
bb_getgrgid                                           42       -     -42
bb_getug                                              80       -     -80
------------------------------------------------------------------------------
(add/remove: 6/3 grow/shrink: 7/12 up/down: 177/-303)        Total: -126 byte

Hints, critics, improvements are as always welcome.

Ciao,
Tito

PS: later maybe some improvements could be done also on the getpwnam and getgrnam 
      based functions. 



More information about the busybox mailing list