diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | src/wc.c | 19 |
3 files changed, 19 insertions, 14 deletions
@@ -1,3 +1,12 @@ +2007-05-25 James Youngman <jay@gnu.org> + + wc: ignore multibyte-character decoding errors + * src/wc.c (wc): Don't issue an error message when mbrtowc + indicates that we have seen an invalid byte sequence. This + makes "wc /bin/sh" bearable (though the word and line counts + are likely not to be useful). + * NEWS: Mention the change. + 2007-05-22 Jim Meyering <jim@meyering.net> Check for an up-to-date copyright year in coreutils.texi. @@ -10,6 +10,11 @@ GNU coreutils NEWS -*- outline -*- option of the same name, this makes uniq consume and produce NUL-terminated lines rather than newline-terminated lines. + wc no longer warns about character decoding errors in multibyte locales. + This means for example that "wc /bin/sh" now produces normal output + (though the word count will have no real meaning) rather than many + error messages. + ** Bug fixes cut now diagnoses a range starting with zero (e.g., -f 0-2) as invalid; @@ -1,5 +1,5 @@ /* wc - print the number of lines, words, and bytes in files - Copyright (C) 85, 91, 1995-2006 Free Software Foundation, Inc. + Copyright (C) 85, 91, 1995-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -274,8 +274,6 @@ wc (int fd, char const *file_x, struct fstatus *fstatus) bool in_word = false; uintmax_t linepos = 0; mbstate_t state = { 0, }; - uintmax_t last_error_line = 0; - int last_error_errno = 0; # if SUPPORT_OLD_MBRTOWC /* Back-up the state before each multibyte character conversion and move the last incomplete character of the buffer to the front @@ -323,17 +321,10 @@ wc (int fd, char const *file_x, struct fstatus *fstatus) } if (n == (size_t) -1) { - /* Signal repeated errors only once per line. */ - if (!(lines + 1 == last_error_line - && errno == last_error_errno)) - { - char line_number_buf[INT_BUFSIZE_BOUND (uintmax_t)]; - last_error_line = lines + 1; - last_error_errno = errno; - error (0, errno, "%s:%s", file, - umaxtostr (last_error_line, line_number_buf)); - ok = false; - } + /* Remember that we read a byte, but don't complain + about the error. Because of the decoding error, + this is a considered to be byte but not a + character (that is, chars is not incremented). */ p++; bytes_read--; } |