ls: use get_cached_username/groupname
No binary (build failed)
—
(log yok)
| @@ -291,7 +291,7 @@ static void dfree(struct dnode **dnp, int nfiles) | |
| free(dnp); /* free the array holding the dnode pointers */ | |
| } | |
| #else | |
| - | #define dfree(...) do {} while (0) |
| + | #define dfree(...) ((void)0) |
| #endif | |
| 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); | |
| } | |
| #else | |
| - | #define dnsort(dn, size) do {} while (0) |
| + | #define dnsort(dn, size) ((void)0) |
| #endif | |
| @@ -541,9 +541,6 @@ static int list_single(struct dnode *dn) | |
| { | |
| int i, column = 0; | |
| - | #if ENABLE_FEATURE_LS_USERNAME |
| - | char scratch[16]; |
| - | #endif |
| #if ENABLE_FEATURE_LS_TIMESTAMPS | |
| char *filetime; | |
| time_t ttime, age; | |
| @@ -584,10 +581,9 @@ static int list_single(struct dnode *dn) | |
| break; | |
| case LIST_ID_NAME: | |
| #if ENABLE_FEATURE_LS_USERNAME | |
| - | bb_getpwuid(scratch, dn->dstat.st_uid, sizeof(scratch)); |
| - | printf("%-8.8s ", scratch); |
| - | bb_getgrgid(scratch, dn->dstat.st_gid, sizeof(scratch)); |
| - | printf("%-8.8s", scratch); |
| + | printf("%-8.8s %-8.8s", |
| + | get_cached_username(dn->dstat.st_uid), |
| + | get_cached_groupname(dn->dstat.st_gid)); |
| column += 17; | |
| break; | |
| #endif | |
| @@ -223,7 +223,6 @@ struct sysinfo { | |
| extern int sysinfo(struct sysinfo* info); | |
| - | |
| extern void chomp(char *s); | |
| extern void trim(char *s); | |
| 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 | |
| * for BusyBox since we want to avoid using the glibc NSS stuff, which | |
| * increases target size and is often not needed on embedded systems. */ | |
| - | extern long xuname2uid(const char *name); |
| - | extern long xgroup2gid(const char *name); |
| + | long xuname2uid(const char *name); |
| + | long xgroup2gid(const char *name); |
| /* 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 */ | |
| struct bb_uidgid_t { | |
| uid_t uid; | |
| 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? */ | |
| /*extern char *bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix);*/ | |
| - | extern char *bb_getpwuid(char *name, long uid, int bufsize); |
| - | extern char *bb_getgrgid(char *group, long gid, int bufsize); |
| + | char *bb_getpwuid(char *name, long uid, 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 }; | |
| @@ -626,9 +631,6 @@ void free_procps_scan(procps_status_t* sp); | |
| procps_status_t* procps_scan(procps_status_t* sp, int flags); | |
| pid_t *find_pid_by_name(const char* procName); | |
| 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[]; | |
| @@ -13,7 +13,7 @@ | |
| typedef struct unsigned_to_name_map_t { | |
| unsigned id; | |
| - | char name[12]; |
| + | char name[USERNAME_MAX_SIZE]; |
| } unsigned_to_name_map_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 (stat(filename, &sb)) | |
| 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->gid = sb.st_gid; | |
| } | |
| @@ -209,7 +209,7 @@ procps_status_t* procps_scan(procps_status_t* sp, int flags) | |
| if ((unsigned char)(buf[n]) < ' ') | |
| buf[n] = ' '; | |
| } while (n); | |
| - | sp->cmd = strdup(buf); |
| + | sp->cmd = xstrdup(buf); |
| } | |
| break; | |
| } | |