diff options
author | John Beppu <beppu@lbox.org> | 1999-12-10 06:15:27 +0000 |
---|---|---|
committer | John Beppu <beppu@lbox.org> | 1999-12-10 06:15:27 +0000 |
commit | 14c82b64c9e94fba678f439e0fd8236ea6a6ee1e (patch) | |
tree | ca6951b2eb89f8d13188e1b82e1ec4de8636c36c | |
parent | 2ad2afd05c6c848cbdc7d745be4edc22dcd13b8e (diff) |
Fleshed out du_main().
I'm not sure which options to support.
-rw-r--r-- | coreutils/du.c | 44 | ||||
-rw-r--r-- | du.c | 44 |
2 files changed, 76 insertions, 12 deletions
diff --git a/coreutils/du.c b/coreutils/du.c index 9e4e11473..b8df7182b 100644 --- a/coreutils/du.c +++ b/coreutils/du.c @@ -26,11 +26,13 @@ #include <fcntl.h> #include <dirent.h> #include <stdio.h> -/* +#if 0 #include <unistd.h> #include <sys/stat.h> -*/ +#endif +static const char du_usage[] = +"Usage: du [OPTION]... [FILE]...\n"; typedef void (Display)(size_t, char *); @@ -42,7 +44,7 @@ print(size_t size, char *filename) /* tiny recursive du */ static size_t -size(char *filename) +du(char *filename) { struct stat statbuf; size_t sum; @@ -65,7 +67,7 @@ size(char *filename) { continue; } sprintf(newfile, "%s/%s", filename, name); - sum += size(newfile); + sum += du(newfile); } closedir(dir); print(sum, filename); @@ -76,8 +78,38 @@ size(char *filename) int du_main(int argc, char **argv) { - /* I'll fill main() in shortly */ - size("."); + int i; + char opt; + + /* parse argv[] */ + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + opt = argv[i][1]; + switch (opt) { + case 's': + break; + case 'h': + usage(du_usage); + break; + default: + fprintf(stderr, "du: invalid option -- %c\n", opt); + usage(du_usage); + } + } else { + break; + } + } + + /* go through remaining args (if any) */ + if (i >= argc) { + du("."); + } else { + for ( ; i < argc; i++) { + printf("%-7d %s\n", du(argv[i]) >> 1, argv[i]); + } + } + exit(0); } +/* $Id: du.c,v 1.2 1999/12/10 06:15:27 beppu Exp $ */ @@ -26,11 +26,13 @@ #include <fcntl.h> #include <dirent.h> #include <stdio.h> -/* +#if 0 #include <unistd.h> #include <sys/stat.h> -*/ +#endif +static const char du_usage[] = +"Usage: du [OPTION]... [FILE]...\n"; typedef void (Display)(size_t, char *); @@ -42,7 +44,7 @@ print(size_t size, char *filename) /* tiny recursive du */ static size_t -size(char *filename) +du(char *filename) { struct stat statbuf; size_t sum; @@ -65,7 +67,7 @@ size(char *filename) { continue; } sprintf(newfile, "%s/%s", filename, name); - sum += size(newfile); + sum += du(newfile); } closedir(dir); print(sum, filename); @@ -76,8 +78,38 @@ size(char *filename) int du_main(int argc, char **argv) { - /* I'll fill main() in shortly */ - size("."); + int i; + char opt; + + /* parse argv[] */ + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + opt = argv[i][1]; + switch (opt) { + case 's': + break; + case 'h': + usage(du_usage); + break; + default: + fprintf(stderr, "du: invalid option -- %c\n", opt); + usage(du_usage); + } + } else { + break; + } + } + + /* go through remaining args (if any) */ + if (i >= argc) { + du("."); + } else { + for ( ; i < argc; i++) { + printf("%-7d %s\n", du(argv[i]) >> 1, argv[i]); + } + } + exit(0); } +/* $Id: du.c,v 1.2 1999/12/10 06:15:27 beppu Exp $ */ |