diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-19 21:24:17 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-19 21:24:17 +0000 |
commit | 2405ad659e2596b17c88e7b950c086159d06cc6e (patch) | |
tree | 35b7039cf3d4fab57d1e4c69cc0bea5bc847a832 | |
parent | 9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e (diff) | |
download | busybox-w32-2405ad659e2596b17c88e7b950c086159d06cc6e.tar.gz busybox-w32-2405ad659e2596b17c88e7b950c086159d06cc6e.tar.bz2 busybox-w32-2405ad659e2596b17c88e7b950c086159d06cc6e.zip |
ls: use get_cached_username/groupname
-rw-r--r-- | coreutils/ls.c | 14 | ||||
-rw-r--r-- | include/libbb.h | 22 | ||||
-rw-r--r-- | libbb/procps.c | 6 |
3 files changed, 20 insertions, 22 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c index ae28f6420..ff0831dac 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c | |||
@@ -291,7 +291,7 @@ static void dfree(struct dnode **dnp, int nfiles) | |||
291 | free(dnp); /* free the array holding the dnode pointers */ | 291 | free(dnp); /* free the array holding the dnode pointers */ |
292 | } | 292 | } |
293 | #else | 293 | #else |
294 | #define dfree(...) do {} while (0) | 294 | #define dfree(...) ((void)0) |
295 | #endif | 295 | #endif |
296 | 296 | ||
297 | static struct dnode **splitdnarray(struct dnode **dn, int nfiles, int which) | 297 | static struct dnode **splitdnarray(struct dnode **dn, int nfiles, int which) |
@@ -375,7 +375,7 @@ static void dnsort(struct dnode **dn, int size) | |||
375 | qsort(dn, size, sizeof(*dn), sortcmp); | 375 | qsort(dn, size, sizeof(*dn), sortcmp); |
376 | } | 376 | } |
377 | #else | 377 | #else |
378 | #define dnsort(dn, size) do {} while (0) | 378 | #define dnsort(dn, size) ((void)0) |
379 | #endif | 379 | #endif |
380 | 380 | ||
381 | 381 | ||
@@ -541,9 +541,6 @@ static int list_single(struct dnode *dn) | |||
541 | { | 541 | { |
542 | int i, column = 0; | 542 | int i, column = 0; |
543 | 543 | ||
544 | #if ENABLE_FEATURE_LS_USERNAME | ||
545 | char scratch[16]; | ||
546 | #endif | ||
547 | #if ENABLE_FEATURE_LS_TIMESTAMPS | 544 | #if ENABLE_FEATURE_LS_TIMESTAMPS |
548 | char *filetime; | 545 | char *filetime; |
549 | time_t ttime, age; | 546 | time_t ttime, age; |
@@ -584,10 +581,9 @@ static int list_single(struct dnode *dn) | |||
584 | break; | 581 | break; |
585 | case LIST_ID_NAME: | 582 | case LIST_ID_NAME: |
586 | #if ENABLE_FEATURE_LS_USERNAME | 583 | #if ENABLE_FEATURE_LS_USERNAME |
587 | bb_getpwuid(scratch, dn->dstat.st_uid, sizeof(scratch)); | 584 | printf("%-8.8s %-8.8s", |
588 | printf("%-8.8s ", scratch); | 585 | get_cached_username(dn->dstat.st_uid), |
589 | bb_getgrgid(scratch, dn->dstat.st_gid, sizeof(scratch)); | 586 | get_cached_groupname(dn->dstat.st_gid)); |
590 | printf("%-8.8s", scratch); | ||
591 | column += 17; | 587 | column += 17; |
592 | break; | 588 | break; |
593 | #endif | 589 | #endif |
diff --git a/include/libbb.h b/include/libbb.h index 7721cbf82..30d3006ad 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -223,7 +223,6 @@ struct sysinfo { | |||
223 | extern int sysinfo(struct sysinfo* info); | 223 | extern int sysinfo(struct sysinfo* info); |
224 | 224 | ||
225 | 225 | ||
226 | |||
227 | extern void chomp(char *s); | 226 | extern void chomp(char *s); |
228 | extern void trim(char *s); | 227 | extern void trim(char *s); |
229 | extern char *skip_whitespace(const char *); | 228 | extern char *skip_whitespace(const char *); |
@@ -410,20 +409,26 @@ uint16_t xatou16(const char *numstr); | |||
410 | /* These parse entries in /etc/passwd and /etc/group. This is desirable | 409 | /* These parse entries in /etc/passwd and /etc/group. This is desirable |
411 | * for BusyBox since we want to avoid using the glibc NSS stuff, which | 410 | * for BusyBox since we want to avoid using the glibc NSS stuff, which |
412 | * increases target size and is often not needed on embedded systems. */ | 411 | * increases target size and is often not needed on embedded systems. */ |
413 | extern long xuname2uid(const char *name); | 412 | long xuname2uid(const char *name); |
414 | extern long xgroup2gid(const char *name); | 413 | long xgroup2gid(const char *name); |
415 | /* wrapper: allows string to contain numeric uid or gid */ | 414 | /* wrapper: allows string to contain numeric uid or gid */ |
416 | extern unsigned long get_ug_id(const char *s, long (*xname2id)(const char *)); | 415 | unsigned long get_ug_id(const char *s, long (*xname2id)(const char *)); |
417 | /* from chpst. Does not die, returns 0 on failure */ | 416 | /* from chpst. Does not die, returns 0 on failure */ |
418 | struct bb_uidgid_t { | 417 | struct bb_uidgid_t { |
419 | uid_t uid; | 418 | uid_t uid; |
420 | gid_t gid; | 419 | gid_t gid; |
421 | }; | 420 | }; |
422 | extern int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok); | 421 | int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok); |
423 | /* what is this? */ | 422 | /* what is this? */ |
424 | /*extern char *bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix);*/ | 423 | /*extern char *bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix);*/ |
425 | extern char *bb_getpwuid(char *name, long uid, int bufsize); | 424 | char *bb_getpwuid(char *name, long uid, int bufsize); |
426 | extern char *bb_getgrgid(char *group, long gid, int bufsize); | 425 | char *bb_getgrgid(char *group, long gid, int bufsize); |
426 | /* versions which cache results (useful for ps, ls etc) */ | ||
427 | const char* get_cached_username(uid_t uid); | ||
428 | const char* get_cached_groupname(gid_t gid); | ||
429 | void clear_username_cache(void); | ||
430 | /* internally usernames are saved in fixed-sized char[] buffers */ | ||
431 | enum { USERNAME_MAX_SIZE = 16 - sizeof(int) }; | ||
427 | 432 | ||
428 | 433 | ||
429 | enum { BB_GETOPT_ERROR = 0x80000000 }; | 434 | enum { BB_GETOPT_ERROR = 0x80000000 }; |
@@ -626,9 +631,6 @@ void free_procps_scan(procps_status_t* sp); | |||
626 | procps_status_t* procps_scan(procps_status_t* sp, int flags); | 631 | procps_status_t* procps_scan(procps_status_t* sp, int flags); |
627 | pid_t *find_pid_by_name(const char* procName); | 632 | pid_t *find_pid_by_name(const char* procName); |
628 | pid_t *pidlist_reverse(pid_t *pidList); | 633 | pid_t *pidlist_reverse(pid_t *pidList); |
629 | void clear_username_cache(void); | ||
630 | const char* get_cached_username(uid_t uid); | ||
631 | const char* get_cached_groupname(gid_t gid); | ||
632 | 634 | ||
633 | 635 | ||
634 | extern const char bb_uuenc_tbl_base64[]; | 636 | extern const char bb_uuenc_tbl_base64[]; |
diff --git a/libbb/procps.c b/libbb/procps.c index a799bf927..e7635e5f4 100644 --- a/libbb/procps.c +++ b/libbb/procps.c | |||
@@ -13,7 +13,7 @@ | |||
13 | 13 | ||
14 | typedef struct unsigned_to_name_map_t { | 14 | typedef struct unsigned_to_name_map_t { |
15 | unsigned id; | 15 | unsigned id; |
16 | char name[12]; | 16 | char name[USERNAME_MAX_SIZE]; |
17 | } unsigned_to_name_map_t; | 17 | } unsigned_to_name_map_t; |
18 | 18 | ||
19 | typedef struct cache_t { | 19 | typedef struct cache_t { |
@@ -137,7 +137,7 @@ procps_status_t* procps_scan(procps_status_t* sp, int flags) | |||
137 | if (flags & PSSCAN_UIDGID) { | 137 | if (flags & PSSCAN_UIDGID) { |
138 | if (stat(filename, &sb)) | 138 | if (stat(filename, &sb)) |
139 | break; | 139 | break; |
140 | /* Need comment - is this effective or read UID/GID? */ | 140 | /* Need comment - is this effective or real UID/GID? */ |
141 | sp->uid = sb.st_uid; | 141 | sp->uid = sb.st_uid; |
142 | sp->gid = sb.st_gid; | 142 | sp->gid = sb.st_gid; |
143 | } | 143 | } |
@@ -209,7 +209,7 @@ procps_status_t* procps_scan(procps_status_t* sp, int flags) | |||
209 | if ((unsigned char)(buf[n]) < ' ') | 209 | if ((unsigned char)(buf[n]) < ' ') |
210 | buf[n] = ' '; | 210 | buf[n] = ' '; |
211 | } while (n); | 211 | } while (n); |
212 | sp->cmd = strdup(buf); | 212 | sp->cmd = xstrdup(buf); |
213 | } | 213 | } |
214 | break; | 214 | break; |
215 | } | 215 | } |