aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-01-19 21:24:17 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-01-19 21:24:17 +0000
commit2405ad659e2596b17c88e7b950c086159d06cc6e (patch)
tree35b7039cf3d4fab57d1e4c69cc0bea5bc847a832
parent9af7c9d6b62ceb07a9ba24cee0cf4a08c689235e (diff)
downloadbusybox-w32-2405ad659e2596b17c88e7b950c086159d06cc6e.tar.gz
busybox-w32-2405ad659e2596b17c88e7b950c086159d06cc6e.tar.bz2
busybox-w32-2405ad659e2596b17c88e7b950c086159d06cc6e.zip
ls: use get_cached_username/groupname
-rw-r--r--coreutils/ls.c14
-rw-r--r--include/libbb.h22
-rw-r--r--libbb/procps.c6
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
297static struct dnode **splitdnarray(struct dnode **dn, int nfiles, int which) 297static 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 {
223extern int sysinfo(struct sysinfo* info); 223extern int sysinfo(struct sysinfo* info);
224 224
225 225
226
227extern void chomp(char *s); 226extern void chomp(char *s);
228extern void trim(char *s); 227extern void trim(char *s);
229extern char *skip_whitespace(const char *); 228extern 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. */
413extern long xuname2uid(const char *name); 412long xuname2uid(const char *name);
414extern long xgroup2gid(const char *name); 413long xgroup2gid(const char *name);
415/* wrapper: allows string to contain numeric uid or gid */ 414/* wrapper: allows string to contain numeric uid or gid */
416extern unsigned long get_ug_id(const char *s, long (*xname2id)(const char *)); 415unsigned 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 */
418struct bb_uidgid_t { 417struct bb_uidgid_t {
419 uid_t uid; 418 uid_t uid;
420 gid_t gid; 419 gid_t gid;
421}; 420};
422extern int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok); 421int 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);*/
425extern char *bb_getpwuid(char *name, long uid, int bufsize); 424char *bb_getpwuid(char *name, long uid, int bufsize);
426extern char *bb_getgrgid(char *group, long gid, int bufsize); 425char *bb_getgrgid(char *group, long gid, int bufsize);
426/* versions which cache results (useful for ps, ls etc) */
427const char* get_cached_username(uid_t uid);
428const char* get_cached_groupname(gid_t gid);
429void clear_username_cache(void);
430/* internally usernames are saved in fixed-sized char[] buffers */
431enum { USERNAME_MAX_SIZE = 16 - sizeof(int) };
427 432
428 433
429enum { BB_GETOPT_ERROR = 0x80000000 }; 434enum { BB_GETOPT_ERROR = 0x80000000 };
@@ -626,9 +631,6 @@ void free_procps_scan(procps_status_t* sp);
626procps_status_t* procps_scan(procps_status_t* sp, int flags); 631procps_status_t* procps_scan(procps_status_t* sp, int flags);
627pid_t *find_pid_by_name(const char* procName); 632pid_t *find_pid_by_name(const char* procName);
628pid_t *pidlist_reverse(pid_t *pidList); 633pid_t *pidlist_reverse(pid_t *pidList);
629void clear_username_cache(void);
630const char* get_cached_username(uid_t uid);
631const char* get_cached_groupname(gid_t gid);
632 634
633 635
634extern const char bb_uuenc_tbl_base64[]; 636extern 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
14typedef struct unsigned_to_name_map_t { 14typedef 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
19typedef struct cache_t { 19typedef 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 }