summaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
authorRichard June <rjune@bravegnuworld.com>2001-01-22 22:35:38 +0000
committerRichard June <rjune@bravegnuworld.com>2001-01-22 22:35:38 +0000
commit6d0921cc0bb01b1d090285c487f8c1120dfa5d3a (patch)
tree97ed53aec9cbe3a3021804e9758abb3e04f05879 /coreutils
parent3b3f5c364a486dc2c081f0684a4315740f349be1 (diff)
downloadbusybox-w32-6d0921cc0bb01b1d090285c487f8c1120dfa5d3a.tar.gz
busybox-w32-6d0921cc0bb01b1d090285c487f8c1120dfa5d3a.tar.bz2
busybox-w32-6d0921cc0bb01b1d090285c487f8c1120dfa5d3a.zip
Add HUMAN_READABLE define for -m and -h support in du, df, and ls
Add support for -k in du, df, and ls(no define, it's for compatibliity with the GNU utils as bb does -k by default) Fix bug #1084
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/df.c68
-rw-r--r--coreutils/du.c26
-rw-r--r--coreutils/ls.c31
3 files changed, 107 insertions, 18 deletions
diff --git a/coreutils/df.c b/coreutils/df.c
index dc4849049..aa04682a7 100644
--- a/coreutils/df.c
+++ b/coreutils/df.c
@@ -28,6 +28,9 @@
28#include <sys/vfs.h> 28#include <sys/vfs.h>
29 29
30extern const char mtab_file[]; /* Defined in utility.c */ 30extern const char mtab_file[]; /* Defined in utility.c */
31#ifdef BB_FEATURE_HUMAN_READABLE
32unsigned long disp_hr = KILOBYTE;
33#endif
31 34
32static int df(char *device, const char *mountPoint) 35static int df(char *device, const char *mountPoint)
33{ 36{
@@ -42,19 +45,32 @@ static int df(char *device, const char *mountPoint)
42 45
43 if (s.f_blocks > 0) { 46 if (s.f_blocks > 0) {
44 blocks_used = s.f_blocks - s.f_bfree; 47 blocks_used = s.f_blocks - s.f_bfree;
45 blocks_percent_used = (long) 48 if(0 == blocks_used)
46 (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); 49 blocs_percent_used = 0;
50 else
51 blocks_percent_used = (long)
52 (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5);
47 if (strcmp(device, "/dev/root") == 0) { 53 if (strcmp(device, "/dev/root") == 0) {
48 /* Adjusts device to be the real root device, 54 /* Adjusts device to be the real root device,
49 * or leaves device alone if it can't find it */ 55 * or leaves device alone if it can't find it */
50 find_real_root_device_name( device); 56 find_real_root_device_name( device);
51 } 57 }
58#ifdef BB_FEATURE_HUMAN_READABLE
59 printf("%-20s %9s",
60 device,
61 format((s.f_blocks * s.f_bsize), disp_hr));
62 printf(" %9s", format((s.f_blocks - s.f_bfree) * s.f_bsize, disp_hr));
63 printf(" %9s %3ld%% %s\n",
64 format(s.f_bavail * s.f_bsize, disp_hr),
65 blocks_percent_used, mountPoint);
66#else
52 printf("%-20s %9ld %9ld %9ld %3ld%% %s\n", 67 printf("%-20s %9ld %9ld %9ld %3ld%% %s\n",
53 device, 68 device,
54 (long) (s.f_blocks * (s.f_bsize / 1024.0)), 69 (long) (s.f_blocks * (s.f_bsize / 1024.0)),
55 (long) ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)), 70 (long) ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)),
56 (long) (s.f_bavail * (s.f_bsize / 1024.0)), 71 (long) (s.f_bavail * (s.f_bsize / 1024.0)),
57 blocks_percent_used, mountPoint); 72 blocks_percent_used, mountPoint);
73#endif
58 74
59 } 75 }
60 76
@@ -64,24 +80,46 @@ static int df(char *device, const char *mountPoint)
64extern int df_main(int argc, char **argv) 80extern int df_main(int argc, char **argv)
65{ 81{
66 int status = EXIT_SUCCESS; 82 int status = EXIT_SUCCESS;
83 int opt = 0;
84 int i = 0;
85
86 while ((opt = getopt(argc, argv, "?"
87#ifdef BB_FEATURE_HUMAN_READABLE
88 "hm"
89#endif
90 "k"
91)) > 0)
92 {
93 switch (opt) {
94#ifdef BB_FEATURE_HUMAN_READABLE
95 case 'h': disp_hr = 0; break;
96 case 'm': disp_hr = MEGABYTE; break;
97 case 'k': disp_hr = KILOBYTE; break;
98#else
99 case 'k': break;
100#endif
101 case '?': goto print_df_usage; break;
102 }
103 }
67 104
68 printf("%-20s %-14s %s %s %s %s\n", "Filesystem", 105 printf("%-20s %-14s %s %s %s %s\n", "Filesystem",
69 "1k-blocks", "Used", "Available", "Use%", "Mounted on"); 106#ifdef BB_FEATURE_HUMAN_READABLE
107 (KILOBYTE == disp_hr) ? "1k-blocks" : " Size",
108#else
109 "1k-blocks",
110#endif
111 "Used", "Available", "Use%", "Mounted on");
70 112
71 if (argc > 1) {
72 struct mntent *mountEntry;
73 113
74 if (**(argv + 1) == '-') { 114 if(optind < argc) {
75 usage(df_usage); 115 struct mntent *mountEntry;
76 } 116 for(i = optind; i < argc; i++)
77 while (argc > 1) { 117 {
78 if ((mountEntry = find_mount_point(argv[1], mtab_file)) == 0) { 118 if ((mountEntry = find_mount_point(argv[i], mtab_file)) == 0) {
79 error_msg("%s: can't find mount point.\n", argv[1]); 119 error_msg("%s: can't find mount point.\n", argv[i]);
80 status = EXIT_FAILURE; 120 status = EXIT_FAILURE;
81 } else if (!df(mountEntry->mnt_fsname, mountEntry->mnt_dir)) 121 } else if (!df(mountEntry->mnt_fsname, mountEntry->mnt_dir))
82 status = EXIT_FAILURE; 122 status = EXIT_FAILURE;
83 argc--;
84 argv++;
85 } 123 }
86 } else { 124 } else {
87 FILE *mountTable; 125 FILE *mountTable;
@@ -101,6 +139,10 @@ extern int df_main(int argc, char **argv)
101 } 139 }
102 140
103 return status; 141 return status;
142
143print_df_usage:
144 usage(df_usage);
145 return(FALSE);
104} 146}
105 147
106/* 148/*
diff --git a/coreutils/du.c b/coreutils/du.c
index 8628732d8..56a7a9a0c 100644
--- a/coreutils/du.c
+++ b/coreutils/du.c
@@ -33,6 +33,10 @@
33#include <stdio.h> 33#include <stdio.h>
34#include <errno.h> 34#include <errno.h>
35 35
36#ifdef BB_FEATURE_HUMAN_READABLE
37unsigned long du_disp_hr = KILOBYTE;
38#endif
39
36typedef void (Display) (long, char *); 40typedef void (Display) (long, char *);
37 41
38static int du_depth = 0; 42static int du_depth = 0;
@@ -42,12 +46,17 @@ static Display *print;
42 46
43static void print_normal(long size, char *filename) 47static void print_normal(long size, char *filename)
44{ 48{
49#ifdef BB_FEATURE_HUMAN_READABLE
50 printf("%s\t%s\n", format((size * KILOBYTE), du_disp_hr), filename);
51#else
45 printf("%ld\t%s\n", size, filename); 52 printf("%ld\t%s\n", size, filename);
53#endif
46} 54}
47 55
48static void print_summary(long size, char *filename) 56static void print_summary(long size, char *filename)
49{ 57{
50 if (du_depth == 1) { 58 if (du_depth == 1) {
59printf("summary\n");
51 print_normal(size, filename); 60 print_normal(size, filename);
52 } 61 }
53} 62}
@@ -132,7 +141,11 @@ int du_main(int argc, char **argv)
132 print = print_normal; 141 print = print_normal;
133 142
134 /* parse argv[] */ 143 /* parse argv[] */
135 while ((c = getopt(argc, argv, "sl")) != EOF) { 144 while ((c = getopt(argc, argv, "sl"
145#ifdef BB_FEATURE_HUMAN_READABLE
146"hm"
147#endif
148"k")) != EOF) {
136 switch (c) { 149 switch (c) {
137 case 's': 150 case 's':
138 print = print_summary; 151 print = print_summary;
@@ -140,6 +153,13 @@ int du_main(int argc, char **argv)
140 case 'l': 153 case 'l':
141 count_hardlinks = 1; 154 count_hardlinks = 1;
142 break; 155 break;
156#ifdef BB_FEATURE_HUMAN_READABLE
157 case 'h': du_disp_hr = 0; break;
158 case 'm': du_disp_hr = MEGABYTE; break;
159 case 'k': du_disp_hr = KILOBYTE; break;
160#else
161 case 'k': break;
162#endif
143 default: 163 default:
144 usage(du_usage); 164 usage(du_usage);
145 } 165 }
@@ -155,7 +175,7 @@ int du_main(int argc, char **argv)
155 for (i=optind; i < argc; i++) { 175 for (i=optind; i < argc; i++) {
156 if ((sum = du(argv[i])) == 0) 176 if ((sum = du(argv[i])) == 0)
157 status = EXIT_FAILURE; 177 status = EXIT_FAILURE;
158 if (is_directory(argv[i], FALSE, NULL)==FALSE) { 178 if(is_directory(argv[i], FALSE, NULL)==FALSE) {
159 print_normal(sum, argv[i]); 179 print_normal(sum, argv[i]);
160 } 180 }
161 reset_ino_dev_hashtable(); 181 reset_ino_dev_hashtable();
@@ -165,7 +185,7 @@ int du_main(int argc, char **argv)
165 return status; 185 return status;
166} 186}
167 187
168/* $Id: du.c,v 1.33 2001/01/18 02:57:08 kraai Exp $ */ 188/* $Id: du.c,v 1.34 2001/01/22 22:35:38 rjune Exp $ */
169/* 189/*
170Local Variables: 190Local Variables:
171c-file-style: "linux" 191c-file-style: "linux"
diff --git a/coreutils/ls.c b/coreutils/ls.c
index fa3e5424d..754a6d450 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -176,6 +176,10 @@ static unsigned short tabstops = 8;
176 176
177static int status = EXIT_SUCCESS; 177static int status = EXIT_SUCCESS;
178 178
179#ifdef BB_FEATURE_HUMAN_READABLE
180unsigned long ls_disp_hr = KILOBYTE;
181#endif
182
179static int my_stat(struct dnode *cur) 183static int my_stat(struct dnode *cur)
180{ 184{
181#ifdef BB_FEATURE_LS_FOLLOWLINKS 185#ifdef BB_FEATURE_LS_FOLLOWLINKS
@@ -583,11 +587,15 @@ int list_single(struct dnode *dn)
583 column += 8; 587 column += 8;
584 break; 588 break;
585 case LIST_BLOCKS: 589 case LIST_BLOCKS:
590#ifdef BB_FEATURE_HUMAN_READABLE
591 fprintf(stdout, "%5s ", format(dn->dstat.st_size, ls_disp_hr));
592#else
586#if _FILE_OFFSET_BITS == 64 593#if _FILE_OFFSET_BITS == 64
587 printf("%4lld ", dn->dstat.st_blocks>>1); 594 printf("%4lld ", dn->dstat.st_blocks>>1);
588#else 595#else
589 printf("%4ld ", dn->dstat.st_blocks>>1); 596 printf("%4ld ", dn->dstat.st_blocks>>1);
590#endif 597#endif
598#endif
591 column += 5; 599 column += 5;
592 break; 600 break;
593 case LIST_MODEBITS: 601 case LIST_MODEBITS:
@@ -622,11 +630,15 @@ int list_single(struct dnode *dn)
622 if (S_ISBLK(dn->dstat.st_mode) || S_ISCHR(dn->dstat.st_mode)) { 630 if (S_ISBLK(dn->dstat.st_mode) || S_ISCHR(dn->dstat.st_mode)) {
623 printf("%4d, %3d ", (int)MAJOR(dn->dstat.st_rdev), (int)MINOR(dn->dstat.st_rdev)); 631 printf("%4d, %3d ", (int)MAJOR(dn->dstat.st_rdev), (int)MINOR(dn->dstat.st_rdev));
624 } else { 632 } else {
633#ifdef BB_FEATURE_HUMAN_READABLE
634 fprintf(stdout, "%9s ", format(dn->dstat.st_size, ls_disp_hr));
635#else
625#if _FILE_OFFSET_BITS == 64 636#if _FILE_OFFSET_BITS == 64
626 printf("%9lld ", dn->dstat.st_size); 637 printf("%9lld ", dn->dstat.st_size);
627#else 638#else
628 printf("%9ld ", dn->dstat.st_size); 639 printf("%9ld ", dn->dstat.st_size);
629#endif 640#endif
641#endif
630 } 642 }
631 column += 10; 643 column += 10;
632 break; 644 break;
@@ -724,7 +736,10 @@ extern int ls_main(int argc, char **argv)
724#ifdef BB_FEATURE_LS_FOLLOWLINKS 736#ifdef BB_FEATURE_LS_FOLLOWLINKS
725"L" 737"L"
726#endif 738#endif
727 )) > 0) { 739#ifdef BB_FEATURE_HUMAN_READABLE
740"h"
741#endif
742"k")) > 0) {
728 switch (opt) { 743 switch (opt) {
729 case '1': style_fmt = STYLE_SINGLE; break; 744 case '1': style_fmt = STYLE_SINGLE; break;
730 case 'A': disp_opts |= DISP_HIDDEN; break; 745 case 'A': disp_opts |= DISP_HIDDEN; break;
@@ -733,7 +748,13 @@ extern int ls_main(int argc, char **argv)
733 case 'd': disp_opts |= DISP_NOLIST; break; 748 case 'd': disp_opts |= DISP_NOLIST; break;
734 case 'g': /* ignore -- for ftp servers */ break; 749 case 'g': /* ignore -- for ftp servers */ break;
735 case 'i': list_fmt |= LIST_INO; break; 750 case 'i': list_fmt |= LIST_INO; break;
736 case 'l': style_fmt = STYLE_LONG; list_fmt |= LIST_LONG; break; 751 case 'l':
752 style_fmt = STYLE_LONG;
753 list_fmt |= LIST_LONG;
754#ifdef BB_FEATURE_HUMAN_READABLE
755 ls_disp_hr = 1;
756#endif
757 break;
737 case 'n': list_fmt |= LIST_ID_NUMERIC; break; 758 case 'n': list_fmt |= LIST_ID_NUMERIC; break;
738 case 's': list_fmt |= LIST_BLOCKS; break; 759 case 's': list_fmt |= LIST_BLOCKS; break;
739 case 'x': disp_opts = DISP_ROWS; break; 760 case 'x': disp_opts = DISP_ROWS; break;
@@ -777,6 +798,12 @@ extern int ls_main(int argc, char **argv)
777 case 'T': tabstops= atoi(optarg); break; 798 case 'T': tabstops= atoi(optarg); break;
778 case 'w': terminal_width= atoi(optarg); break; 799 case 'w': terminal_width= atoi(optarg); break;
779#endif 800#endif
801#ifdef BB_FEATURE_HUMAN_READABLE
802 case 'h': ls_disp_hr = 0; break;
803 case 'k': ls_disp_hr = KILOBYTE; break;
804#else
805 case 'k': break;
806#endif
780 default: 807 default:
781 goto print_usage_message; 808 goto print_usage_message;
782 } 809 }