Index: wc.c =================================================================== RCS file: /cvsroot/src/usr.bin/wc/wc.c,v retrieving revision 1.30 diff -u -r1.30 wc.c --- wc.c 4 Jan 2006 01:58:05 -0000 1.30 +++ wc.c 29 Aug 2007 00:48:36 -0000 @@ -136,11 +136,12 @@ do_mb(wchar_t *wc, const char *p, size_t mblen, mbstate_t *st, size_t *cnt, const char *file) { + wchar_t ch; size_t r; size_t c = 0; do { - r = mbrtowc(wc, p, mblen, st); + r = mbrtowc(&ch, p, mblen, st); if (r == (size_t)-1) { warnx("%s: invalid byte sequence", file); rval = 1; @@ -152,11 +153,17 @@ continue; } else if (r == (size_t)-2) break; - else if (r == 0) + else if (ch == L'\0') { + /* XXX skip escape sequence */ + while (*p) { + mblen--; + p++; + } r = 1; + } c++; if (wc) - wc++; + *wc++ = ch; mblen -= r; p += r; } while (mblen > 0); @@ -282,7 +289,7 @@ warn("%s", name); rval = 1; } - if (dochar && r == (size_t)-2) { + if (dochar && r == (size_t)-2 && !mbsinit(&st)) { warnx("%s: incomplete multibyte character", name); rval = 1; }