Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F106976724
D38496.id116955.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D38496.id116955.diff
View Options
diff --git a/usr.bin/wc/wc.c b/usr.bin/wc/wc.c
--- a/usr.bin/wc/wc.c
+++ b/usr.bin/wc/wc.c
@@ -50,10 +50,10 @@
#include <capsicum_helpers.h>
#include <ctype.h>
-#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <locale.h>
+#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -66,9 +66,11 @@
#include <libcasper.h>
#include <casper/cap_fileargs.h>
+static const char *stdin_filename = "stdin";
+
static fileargs_t *fa;
static uintmax_t tlinect, twordct, tcharct, tlongline;
-static int doline, doword, dochar, domulti, dolongline;
+static bool doline, doword, dochar, domulti, dolongline;
static volatile sig_atomic_t siginfo;
static xo_handle_t *stderr_handle;
@@ -107,21 +109,21 @@
while ((ch = getopt(argc, argv, "clmwL")) != -1)
switch((char)ch) {
case 'l':
- doline = 1;
+ doline = true;
break;
case 'w':
- doword = 1;
+ doword = true;
break;
case 'c':
- dochar = 1;
- domulti = 0;
+ dochar = true;
+ domulti = false;
break;
case 'L':
- dolongline = 1;
+ dolongline = true;
break;
case 'm':
- domulti = 1;
- dochar = 0;
+ domulti = true;
+ dochar = false;
break;
case '?':
default:
@@ -162,19 +164,19 @@
errors = 0;
total = 0;
- if (!*argv) {
- xo_open_instance("file");
- if (cnt((char *)NULL) != 0)
+ if (argc == 0) {
+ xo_open_instance("file");
+ if (cnt(NULL) != 0)
++errors;
- xo_close_instance("file");
+ xo_close_instance("file");
} else {
- do {
- xo_open_instance("file");
- if (cnt(*argv) != 0)
+ while (argc--) {
+ xo_open_instance("file");
+ if (cnt(*argv++) != 0)
++errors;
- xo_close_instance("file");
+ xo_close_instance("file");
++total;
- } while(*++argv);
+ }
}
xo_close_list("file");
@@ -187,7 +189,8 @@
fileargs_free(fa);
xo_close_container("wc");
- xo_finish();
+ if (xo_finish() < 0)
+ xo_err(1, "stdout");
exit(errors == 0 ? 0 : 1);
}
@@ -212,7 +215,7 @@
xo_emit_h(xop, " {:characters/%7ju/%ju}", charct);
if (dolongline)
xo_emit_h(xop, " {:long-lines/%7ju/%ju}", llct);
- if (file != NULL)
+ if (file != stdin_filename)
xo_emit_h(xop, " {:filename/%s}\n", file);
else
xo_emit_h(xop, "\n");
@@ -221,20 +224,21 @@
static int
cnt(const char *file)
{
+ char buf[MAXBSIZE], *p;
struct stat sb;
+ mbstate_t mbs;
uintmax_t linect, wordct, charct, llct, tmpll;
- int fd, len, warned;
+ ssize_t len;
size_t clen;
- short gotsp;
- u_char *p;
- u_char buf[MAXBSIZE];
+ int fd;
wchar_t wch;
- mbstate_t mbs;
+ bool gotsp, warned;
linect = wordct = charct = llct = tmpll = 0;
- if (file == NULL)
+ if (file == NULL) {
fd = STDIN_FILENO;
- else if ((fd = fileargs_open(fa, file)) < 0) {
+ file = stdin_filename;
+ } else if ((fd = fileargs_open(fa, file)) < 0) {
xo_warn("%s: open", file);
return (1);
}
@@ -246,7 +250,7 @@
*/
if (doline == 0 && dolongline == 0) {
if (fstat(fd, &sb)) {
- xo_warn("%s: fstat", file != NULL ? file : "stdin");
+ xo_warn("%s: fstat", file);
(void)close(fd);
return (1);
}
@@ -266,8 +270,8 @@
* handling.
*/
while ((len = read(fd, buf, MAXBSIZE))) {
- if (len == -1) {
- xo_warn("%s: read", file != NULL ? file : "stdin");
+ if (len < 0) {
+ xo_warn("%s: read", file);
(void)close(fd);
return (1);
}
@@ -275,14 +279,16 @@
show_cnt(file, linect, wordct, charct, llct);
charct += len;
if (doline || dolongline) {
- for (p = buf; len--; ++p)
+ for (p = buf; len > 0; --len, ++p) {
if (*p == '\n') {
if (tmpll > llct)
llct = tmpll;
tmpll = 0;
++linect;
- } else
+ } else {
tmpll++;
+ }
+ }
}
}
reset_siginfo();
@@ -297,12 +303,12 @@
return (0);
/* Do it the hard way... */
-word: gotsp = 1;
- warned = 0;
+word: gotsp = true;
+ warned = false;
memset(&mbs, 0, sizeof(mbs));
while ((len = read(fd, buf, MAXBSIZE)) != 0) {
- if (len == -1) {
- xo_warn("%s: read", file != NULL ? file : "stdin");
+ if (len < 0) {
+ xo_warn("%s: read", file);
(void)close(fd);
return (1);
}
@@ -313,21 +319,20 @@
if (!domulti || MB_CUR_MAX == 1) {
clen = 1;
wch = (unsigned char)*p;
- } else if ((clen = mbrtowc(&wch, p, len, &mbs)) ==
- (size_t)-1) {
+ } else if ((clen = mbrtowc(&wch, p, len, &mbs)) == 0) {
+ clen = 1;
+ } else if (clen == (size_t)-1) {
if (!warned) {
errno = EILSEQ;
- xo_warn("%s",
- file != NULL ? file : "stdin");
- warned = 1;
+ xo_warn("%s", file);
+ warned = true;
}
memset(&mbs, 0, sizeof(mbs));
clen = 1;
wch = (unsigned char)*p;
- } else if (clen == (size_t)-2)
+ } else if (clen == (size_t)-2) {
break;
- else if (clen == 0)
- clen = 1;
+ }
charct++;
if (wch != L'\n')
tmpll++;
@@ -339,18 +344,19 @@
tmpll = 0;
++linect;
}
- if (iswspace(wch))
- gotsp = 1;
- else if (gotsp) {
- gotsp = 0;
+ if (iswspace(wch)) {
+ gotsp = true;
+ } else if (gotsp) {
+ gotsp = false;
++wordct;
}
}
}
reset_siginfo();
- if (domulti && MB_CUR_MAX > 1)
+ if (domulti && MB_CUR_MAX > 1) {
if (mbrtowc(NULL, NULL, 0, &mbs) == (size_t)-1 && !warned)
- xo_warn("%s", file != NULL ? file : "stdin");
+ xo_warn("%s", file);
+ }
if (doline)
tlinect += linect;
if (doword)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jan 9, 9:40 AM (3 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15731324
Default Alt Text
D38496.id116955.diff (5 KB)
Attached To
Mode
D38496: wc: Clean up and modernize.
Attached
Detach File
Event Timeline
Log In to Comment