Converted option parsing to using getopt(). Also managed to remove an
authorMark Whitley <markw@lineo.com>
Thu, 20 Jul 2000 00:08:10 +0000 (00:08 -0000)
committerMark Whitley <markw@lineo.com>
Thu, 20 Jul 2000 00:08:10 +0000 (00:08 -0000)
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.

coreutils/wc.c
wc.c

index d1e05ae37824d009c645a3d80910fe3678d62056..02e2b2aa661b99b81f4ca33fab0d61b49ffe2939 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "internal.h"
 #include <stdio.h>
+#include <getopt.h>
 
 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 d1e05ae37824d009c645a3d80910fe3678d62056..02e2b2aa661b99b81f4ca33fab0d61b49ffe2939 100644 (file)
--- a/wc.c
+++ b/wc.c
@@ -22,6 +22,7 @@
 
 #include "internal.h"
 #include <stdio.h>
+#include <getopt.h>
 
 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 ;
 }