From: Mark Whitley Date: Thu, 20 Jul 2000 00:08:10 +0000 (-0000) Subject: Converted option parsing to using getopt(). Also managed to remove an X-Git-Tag: 0_47~215 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=3950596e1e13d3593d06ab3cf1e48a07d5bd80c9;hp=99e370f0c655b24a44c7ebba7c35a36e6b6bd285;p=oweals%2Fbusybox.git Converted option parsing to using getopt(). Also managed to remove an extraneous logic loop that existed only for the purpose of the special case of only one file. I replaced it with a variable to keep track of the number of files read. --- diff --git a/coreutils/wc.c b/coreutils/wc.c index d1e05ae37..02e2b2aa6 100644 --- a/coreutils/wc.c +++ b/coreutils/wc.c @@ -22,6 +22,7 @@ #include "internal.h" #include +#include static int total_lines, total_words, total_chars, max_length; static int print_lines, print_words, print_chars, print_length; @@ -103,13 +104,14 @@ static void wc_file(FILE * file, const char *name) int wc_main(int argc, char **argv) { FILE *file; + unsigned int num_files_counted = 0; + int opt; total_lines = total_words = total_chars = max_length = 0; print_lines = print_words = print_chars = print_length = 0; - while (--argc && **(++argv) == '-') { - while (*++(*argv)) - switch (**argv) { + while ((opt = getopt(argc, argv, "clLw")) > 0) { + switch (opt) { case 'c': print_chars = 1; break; @@ -130,26 +132,24 @@ int wc_main(int argc, char **argv) if (!print_lines && !print_words && !print_chars && !print_length) print_lines = print_words = print_chars = 1; - if (argc == 0) { + if (argv[optind] == NULL || strcmp(argv[optind], "-") == 0) { wc_file(stdin, ""); exit(TRUE); - } else if (argc == 1) { - file = fopen(*argv, "r"); - if (file == NULL) { - fatalError(*argv); - } - wc_file(file, *argv); } else { - while (argc-- > 0) { - file = fopen(*argv, "r"); + while (optind < argc) { + file = fopen(argv[optind], "r"); if (file == NULL) { - fatalError(*argv); + fatalError(argv[optind]); } - wc_file(file, *argv); - argv++; + wc_file(file, argv[optind]); + num_files_counted++; + optind++; } + } + + if (num_files_counted > 1) print_counts(total_lines, total_words, total_chars, max_length, "total"); - } - return(TRUE); + + return 0 ; } diff --git a/wc.c b/wc.c index d1e05ae37..02e2b2aa6 100644 --- a/wc.c +++ b/wc.c @@ -22,6 +22,7 @@ #include "internal.h" #include +#include static int total_lines, total_words, total_chars, max_length; static int print_lines, print_words, print_chars, print_length; @@ -103,13 +104,14 @@ static void wc_file(FILE * file, const char *name) int wc_main(int argc, char **argv) { FILE *file; + unsigned int num_files_counted = 0; + int opt; total_lines = total_words = total_chars = max_length = 0; print_lines = print_words = print_chars = print_length = 0; - while (--argc && **(++argv) == '-') { - while (*++(*argv)) - switch (**argv) { + while ((opt = getopt(argc, argv, "clLw")) > 0) { + switch (opt) { case 'c': print_chars = 1; break; @@ -130,26 +132,24 @@ int wc_main(int argc, char **argv) if (!print_lines && !print_words && !print_chars && !print_length) print_lines = print_words = print_chars = 1; - if (argc == 0) { + if (argv[optind] == NULL || strcmp(argv[optind], "-") == 0) { wc_file(stdin, ""); exit(TRUE); - } else if (argc == 1) { - file = fopen(*argv, "r"); - if (file == NULL) { - fatalError(*argv); - } - wc_file(file, *argv); } else { - while (argc-- > 0) { - file = fopen(*argv, "r"); + while (optind < argc) { + file = fopen(argv[optind], "r"); if (file == NULL) { - fatalError(*argv); + fatalError(argv[optind]); } - wc_file(file, *argv); - argv++; + wc_file(file, argv[optind]); + num_files_counted++; + optind++; } + } + + if (num_files_counted > 1) print_counts(total_lines, total_words, total_chars, max_length, "total"); - } - return(TRUE); + + return 0 ; }