aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Beppu <beppu@lbox.org>1999-12-15 18:52:17 +0000
committerJohn Beppu <beppu@lbox.org>1999-12-15 18:52:17 +0000
commite1618e42a8299cc928ba9af78bbea65899e76f4b (patch)
tree4c79cd53d71791615f0ee0b37116748ccfeefe29
parent3cd5d2541f375d5c87a35028fc4f6db0215872c2 (diff)
downloadbusybox-w32-e1618e42a8299cc928ba9af78bbea65899e76f4b.tar.gz
busybox-w32-e1618e42a8299cc928ba9af78bbea65899e76f4b.tar.bz2
busybox-w32-e1618e42a8299cc928ba9af78bbea65899e76f4b.zip
Implemented du -s
-rw-r--r--coreutils/du.c37
-rw-r--r--du.c37
2 files changed, 62 insertions, 12 deletions
diff --git a/coreutils/du.c b/coreutils/du.c
index 14e0bdf24..e5788c63d 100644
--- a/coreutils/du.c
+++ b/coreutils/du.c
@@ -32,17 +32,35 @@
32#include <sys/stat.h> 32#include <sys/stat.h>
33#endif 33#endif
34 34
35typedef void (Display)(size_t, char *);
36
35static const char du_usage[] = 37static const char du_usage[] =
36"Usage: du [OPTION]... [FILE]...\n"; 38"Usage: du [OPTION]... [FILE]...\n\n"
39"\t-s\tdisplay only a total for each argument\n"
40;
37 41
38typedef void (Display)(size_t, char *); 42static int du_depth = 0;
43
44static Display *print;
39 45
40static void 46static void
41print(size_t size, char *filename) 47print_null(size_t size, char *filename) { }
48
49static void
50print_normal(size_t size, char *filename)
42{ 51{
43 fprintf(stdout, "%-7d %s\n", (size >> 1), filename); 52 fprintf(stdout, "%-7d %s\n", (size >> 1), filename);
44} 53}
45 54
55static void
56print_summary(size_t size, char *filename)
57{
58 if (du_depth == 1) {
59 print_normal(size, filename);
60 }
61}
62
63
46/* tiny recursive du */ 64/* tiny recursive du */
47static size_t 65static size_t
48du(char *filename) 66du(char *filename)
@@ -54,6 +72,8 @@ du(char *filename)
54 fprintf(stdout, "du: %s: %s\n", filename, strerror(errno)); 72 fprintf(stdout, "du: %s: %s\n", filename, strerror(errno));
55 return 0; 73 return 0;
56 } 74 }
75
76 du_depth++;
57 sum = statbuf.st_blocks; 77 sum = statbuf.st_blocks;
58 78
59 if (S_ISDIR(statbuf.st_mode)) { 79 if (S_ISDIR(statbuf.st_mode)) {
@@ -76,6 +96,7 @@ du(char *filename)
76 closedir(dir); 96 closedir(dir);
77 print(sum, filename); 97 print(sum, filename);
78 } 98 }
99 du_depth--;
79 return sum; 100 return sum;
80} 101}
81 102
@@ -85,12 +106,16 @@ du_main(int argc, char **argv)
85 int i; 106 int i;
86 char opt; 107 char opt;
87 108
109 /* default behaviour */
110 print = print_normal;
111
88 /* parse argv[] */ 112 /* parse argv[] */
89 for (i = 1; i < argc; i++) { 113 for (i = 1; i < argc; i++) {
90 if (argv[i][0] == '-') { 114 if (argv[i][0] == '-') {
91 opt = argv[i][1]; 115 opt = argv[i][1];
92 switch (opt) { 116 switch (opt) {
93 case 's': 117 case 's':
118 print = print_summary;
94 break; 119 break;
95 case 'h': 120 case 'h':
96 usage(du_usage); 121 usage(du_usage);
@@ -110,12 +135,12 @@ du_main(int argc, char **argv)
110 } else { 135 } else {
111 int sum; 136 int sum;
112 for ( ; i < argc; i++) { 137 for ( ; i < argc; i++) {
113 sum = du(argv[i]) >> 1; 138 sum = du(argv[i]);
114 if (sum) printf("%-7d %s\n", sum, argv[i]); 139 if (sum) { print_normal(sum, argv[i]); }
115 } 140 }
116 } 141 }
117 142
118 exit(0); 143 exit(0);
119} 144}
120 145
121/* $Id: du.c,v 1.5 1999/12/10 15:23:47 beppu Exp $ */ 146/* $Id: du.c,v 1.6 1999/12/15 18:52:17 beppu Exp $ */
diff --git a/du.c b/du.c
index 14e0bdf24..e5788c63d 100644
--- a/du.c
+++ b/du.c
@@ -32,17 +32,35 @@
32#include <sys/stat.h> 32#include <sys/stat.h>
33#endif 33#endif
34 34
35typedef void (Display)(size_t, char *);
36
35static const char du_usage[] = 37static const char du_usage[] =
36"Usage: du [OPTION]... [FILE]...\n"; 38"Usage: du [OPTION]... [FILE]...\n\n"
39"\t-s\tdisplay only a total for each argument\n"
40;
37 41
38typedef void (Display)(size_t, char *); 42static int du_depth = 0;
43
44static Display *print;
39 45
40static void 46static void
41print(size_t size, char *filename) 47print_null(size_t size, char *filename) { }
48
49static void
50print_normal(size_t size, char *filename)
42{ 51{
43 fprintf(stdout, "%-7d %s\n", (size >> 1), filename); 52 fprintf(stdout, "%-7d %s\n", (size >> 1), filename);
44} 53}
45 54
55static void
56print_summary(size_t size, char *filename)
57{
58 if (du_depth == 1) {
59 print_normal(size, filename);
60 }
61}
62
63
46/* tiny recursive du */ 64/* tiny recursive du */
47static size_t 65static size_t
48du(char *filename) 66du(char *filename)
@@ -54,6 +72,8 @@ du(char *filename)
54 fprintf(stdout, "du: %s: %s\n", filename, strerror(errno)); 72 fprintf(stdout, "du: %s: %s\n", filename, strerror(errno));
55 return 0; 73 return 0;
56 } 74 }
75
76 du_depth++;
57 sum = statbuf.st_blocks; 77 sum = statbuf.st_blocks;
58 78
59 if (S_ISDIR(statbuf.st_mode)) { 79 if (S_ISDIR(statbuf.st_mode)) {
@@ -76,6 +96,7 @@ du(char *filename)
76 closedir(dir); 96 closedir(dir);
77 print(sum, filename); 97 print(sum, filename);
78 } 98 }
99 du_depth--;
79 return sum; 100 return sum;
80} 101}
81 102
@@ -85,12 +106,16 @@ du_main(int argc, char **argv)
85 int i; 106 int i;
86 char opt; 107 char opt;
87 108
109 /* default behaviour */
110 print = print_normal;
111
88 /* parse argv[] */ 112 /* parse argv[] */
89 for (i = 1; i < argc; i++) { 113 for (i = 1; i < argc; i++) {
90 if (argv[i][0] == '-') { 114 if (argv[i][0] == '-') {
91 opt = argv[i][1]; 115 opt = argv[i][1];
92 switch (opt) { 116 switch (opt) {
93 case 's': 117 case 's':
118 print = print_summary;
94 break; 119 break;
95 case 'h': 120 case 'h':
96 usage(du_usage); 121 usage(du_usage);
@@ -110,12 +135,12 @@ du_main(int argc, char **argv)
110 } else { 135 } else {
111 int sum; 136 int sum;
112 for ( ; i < argc; i++) { 137 for ( ; i < argc; i++) {
113 sum = du(argv[i]) >> 1; 138 sum = du(argv[i]);
114 if (sum) printf("%-7d %s\n", sum, argv[i]); 139 if (sum) { print_normal(sum, argv[i]); }
115 } 140 }
116 } 141 }
117 142
118 exit(0); 143 exit(0);
119} 144}
120 145
121/* $Id: du.c,v 1.5 1999/12/10 15:23:47 beppu Exp $ */ 146/* $Id: du.c,v 1.6 1999/12/15 18:52:17 beppu Exp $ */