diff options
-rw-r--r-- | Config.h | 3 | ||||
-rw-r--r-- | applets/usage.c | 42 | ||||
-rw-r--r-- | busybox.h | 7 | ||||
-rw-r--r-- | coreutils/df.c | 68 | ||||
-rw-r--r-- | coreutils/du.c | 26 | ||||
-rw-r--r-- | coreutils/ls.c | 31 | ||||
-rw-r--r-- | df.c | 68 | ||||
-rw-r--r-- | du.c | 26 | ||||
-rw-r--r-- | include/busybox.h | 7 | ||||
-rw-r--r-- | ls.c | 31 | ||||
-rw-r--r-- | usage.c | 42 | ||||
-rw-r--r-- | utility.c | 21 |
12 files changed, 330 insertions, 42 deletions
@@ -290,6 +290,9 @@ // have a really good reason for cleaning things up manually. //#define BB_FEATURE_CLEAN_UP // +// Support for human readable output by ls, du, etc.(example 13k, 23M, 235G) +#define BB_FEATURE_HUMAN_READABLE +// // End of Features List // // diff --git a/applets/usage.c b/applets/usage.c index 8648917..9ae2bb3 100644 --- a/applets/usage.c +++ b/applets/usage.c @@ -190,9 +190,22 @@ const char deallocvt_usage[] = #if defined BB_DF const char df_usage[] = - "df [filesystem ...]" + "df [-?" +#ifdef BB_FEATURE_HUMAN_READABLE + "hm" +#endif + "k] [filesystem ...]\n" #ifndef BB_FEATURE_TRIVIAL_HELP "\n\nPrint the filesystem space used and space available." + "Options:\n" + "\t-?\tshow usage information\n" +#ifdef BB_FEATURE_HUMAN_READABLE + "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n" + "\t-m\tprint sizes in megabytes\n" + "\t-k\tprint sizes in kilobytes(default)\n" +#else + "\t-k\tprint sizes in kilobytes(compatability)\n" +#endif #endif ; #endif @@ -244,13 +257,25 @@ const char dpkg_deb_usage[] = #if defined BB_DU const char du_usage[] = - "du [OPTION]... [FILE]..." + "du [-?ls" +#ifdef BB_FEATURE_HUMAN_READABLE + "hm" +#endif + "k] [FILE]...\n" #ifndef BB_FEATURE_TRIVIAL_HELP "\n\nSummarizes disk space used for each FILE and/or directory.\n" "Disk space is printed in units of 1024 bytes.\n\n" "Options:\n" + "\t-?\tshow usage information\n" "\t-l\tcount sizes many times if hard linked\n" "\t-s\tdisplay only a total for each argument" +#ifdef BB_FEATURE_HUMAN_READABLE + "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n" + "\t-m\tprint sizes in megabytes\n" + "\t-k\tprint sizes in kilobytes(default)\n" +#else + "\t-k\tprint sizes in kilobytes(compatability)\n" +#endif #endif ; #endif @@ -661,7 +686,10 @@ const char ls_usage[] = #ifdef BB_FEATURE_LS_SORTFILES "X" #endif - "] [filenames...]" +#ifdef BB_FEATURE_HUMAN_READABLE + "h" +#endif + "k] [filenames...]\n" #ifndef BB_FEATURE_TRIVIAL_HELP "\n\nList directory contents\n\n" "Options:\n" @@ -716,6 +744,14 @@ const char ls_usage[] = #ifdef BB_FEATURE_LS_SORTFILES "\t-X\tsort the listing by extension\n" #endif + +#ifdef BB_FEATURE_HUMAN_READABLE + "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n" + "\t-k\tprint sizes in kilobytes(default)\n" +#else + "\t-k\tprint sizes in kilobytes(compatability)" +#endif + #endif /* BB_FEATURE_TRIVIAL_HELP */ ; #endif /* BB_LS */ @@ -259,4 +259,11 @@ extern int sysinfo (struct sysinfo* info); #define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0) #endif +#ifdef BB_FEATURE_HUMAN_READABLE +char *format(unsigned long val, unsigned long hr); +#define KILOBYTE 1024 +#define MEGABYTE (KILOBYTE*1024) +#define GIGABYTE (MEGABYTE*1024) +#endif + #endif /* _BB_INTERNAL_H_ */ diff --git a/coreutils/df.c b/coreutils/df.c index dc48490..aa04682 100644 --- a/coreutils/df.c +++ b/coreutils/df.c @@ -28,6 +28,9 @@ #include <sys/vfs.h> extern const char mtab_file[]; /* Defined in utility.c */ +#ifdef BB_FEATURE_HUMAN_READABLE +unsigned long disp_hr = KILOBYTE; +#endif static int df(char *device, const char *mountPoint) { @@ -42,19 +45,32 @@ static int df(char *device, const char *mountPoint) if (s.f_blocks > 0) { blocks_used = s.f_blocks - s.f_bfree; - blocks_percent_used = (long) - (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); + if(0 == blocks_used) + blocs_percent_used = 0; + else + blocks_percent_used = (long) + (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); if (strcmp(device, "/dev/root") == 0) { /* Adjusts device to be the real root device, * or leaves device alone if it can't find it */ find_real_root_device_name( device); } +#ifdef BB_FEATURE_HUMAN_READABLE + printf("%-20s %9s", + device, + format((s.f_blocks * s.f_bsize), disp_hr)); + printf(" %9s", format((s.f_blocks - s.f_bfree) * s.f_bsize, disp_hr)); + printf(" %9s %3ld%% %s\n", + format(s.f_bavail * s.f_bsize, disp_hr), + blocks_percent_used, mountPoint); +#else printf("%-20s %9ld %9ld %9ld %3ld%% %s\n", device, (long) (s.f_blocks * (s.f_bsize / 1024.0)), (long) ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)), (long) (s.f_bavail * (s.f_bsize / 1024.0)), blocks_percent_used, mountPoint); +#endif } @@ -64,24 +80,46 @@ static int df(char *device, const char *mountPoint) extern int df_main(int argc, char **argv) { int status = EXIT_SUCCESS; + int opt = 0; + int i = 0; + + while ((opt = getopt(argc, argv, "?" +#ifdef BB_FEATURE_HUMAN_READABLE + "hm" +#endif + "k" +)) > 0) + { + switch (opt) { +#ifdef BB_FEATURE_HUMAN_READABLE + case 'h': disp_hr = 0; break; + case 'm': disp_hr = MEGABYTE; break; + case 'k': disp_hr = KILOBYTE; break; +#else + case 'k': break; +#endif + case '?': goto print_df_usage; break; + } + } printf("%-20s %-14s %s %s %s %s\n", "Filesystem", - "1k-blocks", "Used", "Available", "Use%", "Mounted on"); +#ifdef BB_FEATURE_HUMAN_READABLE + (KILOBYTE == disp_hr) ? "1k-blocks" : " Size", +#else + "1k-blocks", +#endif + "Used", "Available", "Use%", "Mounted on"); - if (argc > 1) { - struct mntent *mountEntry; - if (**(argv + 1) == '-') { - usage(df_usage); - } - while (argc > 1) { - if ((mountEntry = find_mount_point(argv[1], mtab_file)) == 0) { - error_msg("%s: can't find mount point.\n", argv[1]); + if(optind < argc) { + struct mntent *mountEntry; + for(i = optind; i < argc; i++) + { + if ((mountEntry = find_mount_point(argv[i], mtab_file)) == 0) { + error_msg("%s: can't find mount point.\n", argv[i]); status = EXIT_FAILURE; } else if (!df(mountEntry->mnt_fsname, mountEntry->mnt_dir)) status = EXIT_FAILURE; - argc--; - argv++; } } else { FILE *mountTable; @@ -101,6 +139,10 @@ extern int df_main(int argc, char **argv) } return status; + +print_df_usage: + usage(df_usage); + return(FALSE); } /* diff --git a/coreutils/du.c b/coreutils/du.c index 8628732..56a7a9a 100644 --- a/coreutils/du.c +++ b/coreutils/du.c @@ -33,6 +33,10 @@ #include <stdio.h> #include <errno.h> +#ifdef BB_FEATURE_HUMAN_READABLE +unsigned long du_disp_hr = KILOBYTE; +#endif + typedef void (Display) (long, char *); static int du_depth = 0; @@ -42,12 +46,17 @@ static Display *print; static void print_normal(long size, char *filename) { +#ifdef BB_FEATURE_HUMAN_READABLE + printf("%s\t%s\n", format((size * KILOBYTE), du_disp_hr), filename); +#else printf("%ld\t%s\n", size, filename); +#endif } static void print_summary(long size, char *filename) { if (du_depth == 1) { +printf("summary\n"); print_normal(size, filename); } } @@ -132,7 +141,11 @@ int du_main(int argc, char **argv) print = print_normal; /* parse argv[] */ - while ((c = getopt(argc, argv, "sl")) != EOF) { + while ((c = getopt(argc, argv, "sl" +#ifdef BB_FEATURE_HUMAN_READABLE +"hm" +#endif +"k")) != EOF) { switch (c) { case 's': print = print_summary; @@ -140,6 +153,13 @@ int du_main(int argc, char **argv) case 'l': count_hardlinks = 1; break; +#ifdef BB_FEATURE_HUMAN_READABLE + case 'h': du_disp_hr = 0; break; + case 'm': du_disp_hr = MEGABYTE; break; + case 'k': du_disp_hr = KILOBYTE; break; +#else + case 'k': break; +#endif default: usage(du_usage); } @@ -155,7 +175,7 @@ int du_main(int argc, char **argv) for (i=optind; i < argc; i++) { if ((sum = du(argv[i])) == 0) status = EXIT_FAILURE; - if (is_directory(argv[i], FALSE, NULL)==FALSE) { + if(is_directory(argv[i], FALSE, NULL)==FALSE) { print_normal(sum, argv[i]); } reset_ino_dev_hashtable(); @@ -165,7 +185,7 @@ int du_main(int argc, char **argv) return status; } -/* $Id: du.c,v 1.33 2001/01/18 02:57:08 kraai Exp $ */ +/* $Id: du.c,v 1.34 2001/01/22 22:35:38 rjune Exp $ */ /* Local Variables: c-file-style: "linux" 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; } @@ -28,6 +28,9 @@ #include <sys/vfs.h> extern const char mtab_file[]; /* Defined in utility.c */ +#ifdef BB_FEATURE_HUMAN_READABLE +unsigned long disp_hr = KILOBYTE; +#endif static int df(char *device, const char *mountPoint) { @@ -42,19 +45,32 @@ static int df(char *device, const char *mountPoint) if (s.f_blocks > 0) { blocks_used = s.f_blocks - s.f_bfree; - blocks_percent_used = (long) - (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); + if(0 == blocks_used) + blocs_percent_used = 0; + else + blocks_percent_used = (long) + (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); if (strcmp(device, "/dev/root") == 0) { /* Adjusts device to be the real root device, * or leaves device alone if it can't find it */ find_real_root_device_name( device); } +#ifdef BB_FEATURE_HUMAN_READABLE + printf("%-20s %9s", + device, + format((s.f_blocks * s.f_bsize), disp_hr)); + printf(" %9s", format((s.f_blocks - s.f_bfree) * s.f_bsize, disp_hr)); + printf(" %9s %3ld%% %s\n", + format(s.f_bavail * s.f_bsize, disp_hr), + blocks_percent_used, mountPoint); +#else printf("%-20s %9ld %9ld %9ld %3ld%% %s\n", device, (long) (s.f_blocks * (s.f_bsize / 1024.0)), (long) ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)), (long) (s.f_bavail * (s.f_bsize / 1024.0)), blocks_percent_used, mountPoint); +#endif } @@ -64,24 +80,46 @@ static int df(char *device, const char *mountPoint) extern int df_main(int argc, char **argv) { int status = EXIT_SUCCESS; + int opt = 0; + int i = 0; + + while ((opt = getopt(argc, argv, "?" +#ifdef BB_FEATURE_HUMAN_READABLE + "hm" +#endif + "k" +)) > 0) + { + switch (opt) { +#ifdef BB_FEATURE_HUMAN_READABLE + case 'h': disp_hr = 0; break; + case 'm': disp_hr = MEGABYTE; break; + case 'k': disp_hr = KILOBYTE; break; +#else + case 'k': break; +#endif + case '?': goto print_df_usage; break; + } + } printf("%-20s %-14s %s %s %s %s\n", "Filesystem", - "1k-blocks", "Used", "Available", "Use%", "Mounted on"); +#ifdef BB_FEATURE_HUMAN_READABLE + (KILOBYTE == disp_hr) ? "1k-blocks" : " Size", +#else + "1k-blocks", +#endif + "Used", "Available", "Use%", "Mounted on"); - if (argc > 1) { - struct mntent *mountEntry; - if (**(argv + 1) == '-') { - usage(df_usage); - } - while (argc > 1) { - if ((mountEntry = find_mount_point(argv[1], mtab_file)) == 0) { - error_msg("%s: can't find mount point.\n", argv[1]); + if(optind < argc) { + struct mntent *mountEntry; + for(i = optind; i < argc; i++) + { + if ((mountEntry = find_mount_point(argv[i], mtab_file)) == 0) { + error_msg("%s: can't find mount point.\n", argv[i]); status = EXIT_FAILURE; } else if (!df(mountEntry->mnt_fsname, mountEntry->mnt_dir)) status = EXIT_FAILURE; - argc--; - argv++; } } else { FILE *mountTable; @@ -101,6 +139,10 @@ extern int df_main(int argc, char **argv) } return status; + +print_df_usage: + usage(df_usage); + return(FALSE); } /* @@ -33,6 +33,10 @@ #include <stdio.h> #include <errno.h> +#ifdef BB_FEATURE_HUMAN_READABLE +unsigned long du_disp_hr = KILOBYTE; +#endif + typedef void (Display) (long, char *); static int du_depth = 0; @@ -42,12 +46,17 @@ static Display *print; static void print_normal(long size, char *filename) { +#ifdef BB_FEATURE_HUMAN_READABLE + printf("%s\t%s\n", format((size * KILOBYTE), du_disp_hr), filename); +#else printf("%ld\t%s\n", size, filename); +#endif } static void print_summary(long size, char *filename) { if (du_depth == 1) { +printf("summary\n"); print_normal(size, filename); } } @@ -132,7 +141,11 @@ int du_main(int argc, char **argv) print = print_normal; /* parse argv[] */ - while ((c = getopt(argc, argv, "sl")) != EOF) { + while ((c = getopt(argc, argv, "sl" +#ifdef BB_FEATURE_HUMAN_READABLE +"hm" +#endif +"k")) != EOF) { switch (c) { case 's': print = print_summary; @@ -140,6 +153,13 @@ int du_main(int argc, char **argv) case 'l': count_hardlinks = 1; break; +#ifdef BB_FEATURE_HUMAN_READABLE + case 'h': du_disp_hr = 0; break; + case 'm': du_disp_hr = MEGABYTE; break; + case 'k': du_disp_hr = KILOBYTE; break; +#else + case 'k': break; +#endif default: usage(du_usage); } @@ -155,7 +175,7 @@ int du_main(int argc, char **argv) for (i=optind; i < argc; i++) { if ((sum = du(argv[i])) == 0) status = EXIT_FAILURE; - if (is_directory(argv[i], FALSE, NULL)==FALSE) { + if(is_directory(argv[i], FALSE, NULL)==FALSE) { print_normal(sum, argv[i]); } reset_ino_dev_hashtable(); @@ -165,7 +185,7 @@ int du_main(int argc, char **argv) return status; } -/* $Id: du.c,v 1.33 2001/01/18 02:57:08 kraai Exp $ */ +/* $Id: du.c,v 1.34 2001/01/22 22:35:38 rjune Exp $ */ /* Local Variables: c-file-style: "linux" diff --git a/include/busybox.h b/include/busybox.h index a89ac36..018c636 100644 --- a/include/busybox.h +++ b/include/busybox.h @@ -259,4 +259,11 @@ extern int sysinfo (struct sysinfo* info); #define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0) #endif +#ifdef BB_FEATURE_HUMAN_READABLE +char *format(unsigned long val, unsigned long hr); +#define KILOBYTE 1024 +#define MEGABYTE (KILOBYTE*1024) +#define GIGABYTE (MEGABYTE*1024) +#endif + #endif /* _BB_INTERNAL_H_ */ @@ -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; } @@ -190,9 +190,22 @@ const char deallocvt_usage[] = #if defined BB_DF const char df_usage[] = - "df [filesystem ...]" + "df [-?" +#ifdef BB_FEATURE_HUMAN_READABLE + "hm" +#endif + "k] [filesystem ...]\n" #ifndef BB_FEATURE_TRIVIAL_HELP "\n\nPrint the filesystem space used and space available." + "Options:\n" + "\t-?\tshow usage information\n" +#ifdef BB_FEATURE_HUMAN_READABLE + "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n" + "\t-m\tprint sizes in megabytes\n" + "\t-k\tprint sizes in kilobytes(default)\n" +#else + "\t-k\tprint sizes in kilobytes(compatability)\n" +#endif #endif ; #endif @@ -244,13 +257,25 @@ const char dpkg_deb_usage[] = #if defined BB_DU const char du_usage[] = - "du [OPTION]... [FILE]..." + "du [-?ls" +#ifdef BB_FEATURE_HUMAN_READABLE + "hm" +#endif + "k] [FILE]...\n" #ifndef BB_FEATURE_TRIVIAL_HELP "\n\nSummarizes disk space used for each FILE and/or directory.\n" "Disk space is printed in units of 1024 bytes.\n\n" "Options:\n" + "\t-?\tshow usage information\n" "\t-l\tcount sizes many times if hard linked\n" "\t-s\tdisplay only a total for each argument" +#ifdef BB_FEATURE_HUMAN_READABLE + "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n" + "\t-m\tprint sizes in megabytes\n" + "\t-k\tprint sizes in kilobytes(default)\n" +#else + "\t-k\tprint sizes in kilobytes(compatability)\n" +#endif #endif ; #endif @@ -661,7 +686,10 @@ const char ls_usage[] = #ifdef BB_FEATURE_LS_SORTFILES "X" #endif - "] [filenames...]" +#ifdef BB_FEATURE_HUMAN_READABLE + "h" +#endif + "k] [filenames...]\n" #ifndef BB_FEATURE_TRIVIAL_HELP "\n\nList directory contents\n\n" "Options:\n" @@ -716,6 +744,14 @@ const char ls_usage[] = #ifdef BB_FEATURE_LS_SORTFILES "\t-X\tsort the listing by extension\n" #endif + +#ifdef BB_FEATURE_HUMAN_READABLE + "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n" + "\t-k\tprint sizes in kilobytes(default)\n" +#else + "\t-k\tprint sizes in kilobytes(compatability)" +#endif + #endif /* BB_FEATURE_TRIVIAL_HELP */ ; #endif /* BB_LS */ @@ -1770,6 +1770,27 @@ ssize_t safe_read(int fd, void *buf, size_t count) } #endif +#ifdef BB_FEATURE_HUMAN_READABLE +char *format(unsigned long val, unsigned long hr) +{ + static char str[10] = "\0"; + + if(val == 0) + return("0"); + if(hr) + snprintf(str, 9, "%ld", val/hr); + else if(val >= GIGABYTE) + snprintf(str, 9, "%.1LfG", ((long double)(val)/GIGABYTE)); + else if(val >= MEGABYTE) + snprintf(str, 9, "%.1LfM", ((long double)(val)/MEGABYTE)); + else if(val >= KILOBYTE) + snprintf(str, 9, "%.1Lfk", ((long double)(val)/KILOBYTE)); + else + snprintf(str, 9, "%ld", (val)); + return(str); +} +#endif + /* END CODE */ /* Local Variables: |