Make the file_mbswidth() function cope if wcwidth() returns -1.
Maybe this should just call wcswidth() but I'll leave that for another day.
Index: file.c
===================================================================
RCS file: /cvs/src/usr.bin/file/file.c,v
retrieving revision 1.22
diff -u -p -r1.22 file.c
--- file.c 27 Oct 2009 23:59:37 -0000 1.22
+++ file.c 3 Apr 2011 22:01:55 -0000
@@ -424,6 +424,7 @@ file_mbswidth(const char *s)
wchar_t nextchar;
(void)memset(&state, 0, sizeof(mbstate_t));
old_n = n = strlen(s);
+ int w;
while (n > 0) {
bytesconsumed = mbrtowc(&nextchar, s, n, &state);
@@ -438,8 +439,11 @@ file_mbswidth(const char *s)
* is always right
*/
width++;
- } else
- width += wcwidth(nextchar);
+ } else {
+ w = wcwidth(nextchar);
+ if (w > 0)
+ width += w;
+ }
s += bytesconsumed, n -= bytesconsumed;
}