Hi tech@,
Some cleanups and tweaks for wc(1):
- Removed unnecessary string.h include
- Changed 'format_and_print' argument type to int64_t and casting
inside the function
- Declaring 'print_counts', 'format_and_print', and 'cnt' as static
- Remove unnecessary cast for NULL, and (void) casts from printfs,
'mbtowc' and 'format_and_print' calls
- In 'cnt', change bufsz type from ssize_t to size_t to avoid
converting between pointers to integer types with different sign
when calling getline (catched when compiling with Clang)
- Use return instead of exit in main
Index: wc.c
===================================================================
RCS file: /cvs/src/usr.bin/wc/wc.c,v
retrieving revision 1.20
diff -u -p -u -p -r1.20 wc.c
--- wc.c 8 Dec 2015 01:00:45 -0000 1.20
+++ wc.c 8 May 2016 21:51:28 -0000
@@ -34,7 +34,6 @@
#include <sys/file.h>
#include <stdio.h>
#include <stdlib.h>
-#include <string.h>
#include <locale.h>
#include <ctype.h>
#include <err.h>
@@ -45,12 +44,12 @@
int64_t tlinect, twordct, tcharct;
int doline, doword, dochar, humanchar, multibyte;
-int rval;
+int rval;
extern char *__progname;
-void print_counts(int64_t, int64_t, int64_t, char *);
-void format_and_print(long long);
-void cnt(char *);
+static void print_counts(int64_t, int64_t, int64_t, char *);
+static void format_and_print(int64_t);
+static void cnt(char *);
int
main(int argc, char *argv[])
@@ -82,10 +81,10 @@ main(int argc, char *argv[])
break;
case '?':
default:
- (void)fprintf(stderr,
+ fprintf(stderr,
"usage: %s [-c | -m] [-hlw] [file ...]\n",
__progname);
- exit(1);
+ return 1;
}
argv += optind;
argc -= optind;
@@ -99,7 +98,7 @@ main(int argc, char *argv[])
doline = doword = dochar = 1;
if (!*argv) {
- cnt((char *)NULL);
+ cnt(NULL);
} else {
int dototal = (argc > 1);
@@ -111,14 +110,14 @@ main(int argc, char *argv[])
print_counts(tlinect, twordct, tcharct, "total");
}
- exit(rval);
+ return rval;
}
-void
+static void
cnt(char *file)
{
static char *buf;
- static ssize_t bufsz;
+ static size_t bufsz;
FILE *stream;
char *C;
@@ -213,7 +212,7 @@ cnt(char *file)
++charct;
len = mbtowc(&wc, C, MB_CUR_MAX);
if (len == -1) {
- (void)mbtowc(NULL, NULL,
+ mbtowc(NULL, NULL,
MB_CUR_MAX);
len = 1;
wc = L' ';
@@ -263,31 +262,31 @@ cnt(char *file)
}
}
-void
-format_and_print(long long v)
+static void
+format_and_print(int64_t v)
{
if (humanchar) {
char result[FMT_SCALED_STRSIZE];
- (void)fmt_scaled(v, result);
- (void)printf("%7s", result);
+ fmt_scaled((long long)v, result);
+ printf("%7s", result);
} else {
- (void)printf(" %7lld", v);
+ printf(" %7lld", v);
}
}
-void
+static void
print_counts(int64_t lines, int64_t words, int64_t chars, char *name)
{
if (doline)
- format_and_print((long long)lines);
+ format_and_print(lines);
if (doword)
- format_and_print((long long)words);
+ format_and_print(words);
if (dochar)
- format_and_print((long long)chars);
+ format_and_print(chars);
if (name)
- (void)printf(" %s\n", name);
+ printf(" %s\n", name);
else
- (void)printf("\n");
+ printf("\n");
}