summaryrefslogtreecommitdiffhomepage
path: root/coreutils
diff options
context:
space:
mode:
authorMark Whitley <markw@lineo.com>2000-07-20 00:08:10 +0000
committerMark Whitley <markw@lineo.com>2000-07-20 00:08:10 +0000
commit3950596e1e13d3593d06ab3cf1e48a07d5bd80c9 (patch)
tree56b1e31b4ab5faddc6e67f19e8e1be1e6565cf28 /coreutils
parent99e370f0c655b24a44c7ebba7c35a36e6b6bd285 (diff)
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.
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/wc.c34
1 files changed, 17 insertions, 17 deletions
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 <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 ;
}