diff options
Diffstat (limited to 'coreutils/ls.c')
-rw-r--r-- | coreutils/ls.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c index fa3e542..754a6d4 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c @@ -176,6 +176,10 @@ static unsigned short tabstops = 8; static int status = EXIT_SUCCESS; +#ifdef BB_FEATURE_HUMAN_READABLE +unsigned long ls_disp_hr = KILOBYTE; +#endif + static int my_stat(struct dnode *cur) { #ifdef BB_FEATURE_LS_FOLLOWLINKS @@ -583,11 +587,15 @@ int list_single(struct dnode *dn) column += 8; break; case LIST_BLOCKS: +#ifdef BB_FEATURE_HUMAN_READABLE + fprintf(stdout, "%5s ", format(dn->dstat.st_size, ls_disp_hr)); +#else #if _FILE_OFFSET_BITS == 64 printf("%4lld ", dn->dstat.st_blocks>>1); #else printf("%4ld ", dn->dstat.st_blocks>>1); #endif +#endif column += 5; break; case LIST_MODEBITS: @@ -622,11 +630,15 @@ int list_single(struct dnode *dn) if (S_ISBLK(dn->dstat.st_mode) || S_ISCHR(dn->dstat.st_mode)) { printf("%4d, %3d ", (int)MAJOR(dn->dstat.st_rdev), (int)MINOR(dn->dstat.st_rdev)); } else { +#ifdef BB_FEATURE_HUMAN_READABLE + fprintf(stdout, "%9s ", format(dn->dstat.st_size, ls_disp_hr)); +#else #if _FILE_OFFSET_BITS == 64 printf("%9lld ", dn->dstat.st_size); #else printf("%9ld ", dn->dstat.st_size); #endif +#endif } column += 10; break; @@ -724,7 +736,10 @@ extern int ls_main(int argc, char **argv) #ifdef BB_FEATURE_LS_FOLLOWLINKS "L" #endif - )) > 0) { +#ifdef BB_FEATURE_HUMAN_READABLE +"h" +#endif +"k")) > 0) { switch (opt) { case '1': style_fmt = STYLE_SINGLE; break; case 'A': disp_opts |= DISP_HIDDEN; break; @@ -733,7 +748,13 @@ extern int ls_main(int argc, char **argv) case 'd': disp_opts |= DISP_NOLIST; break; case 'g': /* ignore -- for ftp servers */ break; case 'i': list_fmt |= LIST_INO; break; - case 'l': style_fmt = STYLE_LONG; list_fmt |= LIST_LONG; break; + case 'l': + style_fmt = STYLE_LONG; + list_fmt |= LIST_LONG; +#ifdef BB_FEATURE_HUMAN_READABLE + ls_disp_hr = 1; +#endif + break; case 'n': list_fmt |= LIST_ID_NUMERIC; break; case 's': list_fmt |= LIST_BLOCKS; break; case 'x': disp_opts = DISP_ROWS; break; @@ -777,6 +798,12 @@ extern int ls_main(int argc, char **argv) case 'T': tabstops= atoi(optarg); break; case 'w': terminal_width= atoi(optarg); break; #endif +#ifdef BB_FEATURE_HUMAN_READABLE + case 'h': ls_disp_hr = 0; break; + case 'k': ls_disp_hr = KILOBYTE; break; +#else + case 'k': break; +#endif default: goto print_usage_message; } |