ls: use get_cached_username/groupname

This commit is contained in:
Denis Vlasenko 2007-01-19 21:24:17 +00:00
parent 9af7c9d6b6
commit 2405ad659e
3 changed files with 20 additions and 22 deletions

View File

@ -291,7 +291,7 @@ static void dfree(struct dnode **dnp, int nfiles)
free(dnp); /* free the array holding the dnode pointers */ free(dnp); /* free the array holding the dnode pointers */
} }
#else #else
#define dfree(...) do {} while (0) #define dfree(...) ((void)0)
#endif #endif
static struct dnode **splitdnarray(struct dnode **dn, int nfiles, int which) static struct dnode **splitdnarray(struct dnode **dn, int nfiles, int which)
@ -375,7 +375,7 @@ static void dnsort(struct dnode **dn, int size)
qsort(dn, size, sizeof(*dn), sortcmp); qsort(dn, size, sizeof(*dn), sortcmp);
} }
#else #else
#define dnsort(dn, size) do {} while (0) #define dnsort(dn, size) ((void)0)
#endif #endif
@ -541,9 +541,6 @@ static int list_single(struct dnode *dn)
{ {
int i, column = 0; int i, column = 0;
#if ENABLE_FEATURE_LS_USERNAME
char scratch[16];
#endif
#if ENABLE_FEATURE_LS_TIMESTAMPS #if ENABLE_FEATURE_LS_TIMESTAMPS
char *filetime; char *filetime;
time_t ttime, age; time_t ttime, age;
@ -584,10 +581,9 @@ static int list_single(struct dnode *dn)
break; break;
case LIST_ID_NAME: case LIST_ID_NAME:
#if ENABLE_FEATURE_LS_USERNAME #if ENABLE_FEATURE_LS_USERNAME
bb_getpwuid(scratch, dn->dstat.st_uid, sizeof(scratch)); printf("%-8.8s %-8.8s",
printf("%-8.8s ", scratch); get_cached_username(dn->dstat.st_uid),
bb_getgrgid(scratch, dn->dstat.st_gid, sizeof(scratch)); get_cached_groupname(dn->dstat.st_gid));
printf("%-8.8s", scratch);
column += 17; column += 17;
break; break;
#endif #endif

View File

@ -223,7 +223,6 @@ struct sysinfo {
extern int sysinfo(struct sysinfo* info); extern int sysinfo(struct sysinfo* info);
extern void chomp(char *s); extern void chomp(char *s);
extern void trim(char *s); extern void trim(char *s);
extern char *skip_whitespace(const char *); extern char *skip_whitespace(const char *);
@ -410,20 +409,26 @@ uint16_t xatou16(const char *numstr);
/* These parse entries in /etc/passwd and /etc/group. This is desirable /* These parse entries in /etc/passwd and /etc/group. This is desirable
* for BusyBox since we want to avoid using the glibc NSS stuff, which * for BusyBox since we want to avoid using the glibc NSS stuff, which
* increases target size and is often not needed on embedded systems. */ * increases target size and is often not needed on embedded systems. */
extern long xuname2uid(const char *name); long xuname2uid(const char *name);
extern long xgroup2gid(const char *name); long xgroup2gid(const char *name);
/* wrapper: allows string to contain numeric uid or gid */ /* wrapper: allows string to contain numeric uid or gid */
extern unsigned long get_ug_id(const char *s, long (*xname2id)(const char *)); unsigned long get_ug_id(const char *s, long (*xname2id)(const char *));
/* from chpst. Does not die, returns 0 on failure */ /* from chpst. Does not die, returns 0 on failure */
struct bb_uidgid_t { struct bb_uidgid_t {
uid_t uid; uid_t uid;
gid_t gid; gid_t gid;
}; };
extern int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok); int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok);
/* what is this? */ /* what is this? */
/*extern char *bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix);*/ /*extern char *bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix);*/
extern char *bb_getpwuid(char *name, long uid, int bufsize); char *bb_getpwuid(char *name, long uid, int bufsize);
extern char *bb_getgrgid(char *group, long gid, int bufsize); char *bb_getgrgid(char *group, long gid, int bufsize);
/* versions which cache results (useful for ps, ls etc) */
const char* get_cached_username(uid_t uid);
const char* get_cached_groupname(gid_t gid);
void clear_username_cache(void);
/* internally usernames are saved in fixed-sized char[] buffers */
enum { USERNAME_MAX_SIZE = 16 - sizeof(int) };
enum { BB_GETOPT_ERROR = 0x80000000 }; enum { BB_GETOPT_ERROR = 0x80000000 };
@ -626,9 +631,6 @@ void free_procps_scan(procps_status_t* sp);
procps_status_t* procps_scan(procps_status_t* sp, int flags); procps_status_t* procps_scan(procps_status_t* sp, int flags);
pid_t *find_pid_by_name(const char* procName); pid_t *find_pid_by_name(const char* procName);
pid_t *pidlist_reverse(pid_t *pidList); pid_t *pidlist_reverse(pid_t *pidList);
void clear_username_cache(void);
const char* get_cached_username(uid_t uid);
const char* get_cached_groupname(gid_t gid);
extern const char bb_uuenc_tbl_base64[]; extern const char bb_uuenc_tbl_base64[];

View File

@ -13,7 +13,7 @@
typedef struct unsigned_to_name_map_t { typedef struct unsigned_to_name_map_t {
unsigned id; unsigned id;
char name[12]; char name[USERNAME_MAX_SIZE];
} unsigned_to_name_map_t; } unsigned_to_name_map_t;
typedef struct cache_t { typedef struct cache_t {
@ -137,7 +137,7 @@ procps_status_t* procps_scan(procps_status_t* sp, int flags)
if (flags & PSSCAN_UIDGID) { if (flags & PSSCAN_UIDGID) {
if (stat(filename, &sb)) if (stat(filename, &sb))
break; break;
/* Need comment - is this effective or read UID/GID? */ /* Need comment - is this effective or real UID/GID? */
sp->uid = sb.st_uid; sp->uid = sb.st_uid;
sp->gid = sb.st_gid; sp->gid = sb.st_gid;
} }
@ -209,7 +209,7 @@ procps_status_t* procps_scan(procps_status_t* sp, int flags)
if ((unsigned char)(buf[n]) < ' ') if ((unsigned char)(buf[n]) < ' ')
buf[n] = ' '; buf[n] = ' ';
} while (n); } while (n);
sp->cmd = strdup(buf); sp->cmd = xstrdup(buf);
} }
break; break;
} }