[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