Module Name:    src
Committed By:   christos
Date:           Wed Feb 20 17:04:45 UTC 2013

Modified Files:
        src/usr.bin/vis: vis.c

Log Message:
use MB_LEN_MAX directly instead of assuming how large it is.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/usr.bin/vis/vis.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/vis/vis.c
diff -u src/usr.bin/vis/vis.c:1.21 src/usr.bin/vis/vis.c:1.22
--- src/usr.bin/vis/vis.c:1.21	Thu Feb 14 19:29:44 2013
+++ src/usr.bin/vis/vis.c	Wed Feb 20 12:04:45 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: vis.c,v 1.21 2013/02/15 00:29:44 christos Exp $	*/
+/*	$NetBSD: vis.c,v 1.22 2013/02/20 17:04:45 christos Exp $	*/
 
 /*-
  * Copyright (c) 1989, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1989, 19
 #if 0
 static char sccsid[] = "@(#)vis.c	8.1 (Berkeley) 6/6/93";
 #endif
-__RCSID("$NetBSD: vis.c,v 1.21 2013/02/15 00:29:44 christos Exp $");
+__RCSID("$NetBSD: vis.c,v 1.22 2013/02/20 17:04:45 christos Exp $");
 #endif /* not lint */
 
 #include <stdio.h>
@@ -162,8 +162,8 @@ process(FILE *fp)
 	static char nul[] = "\0";
 	char *cp = nul + 1;	/* so *(cp-1) starts out != '\n' */
 	wint_t c, c1, rachar;
-	char mbibuff[13]; /* (2 wchars (i.e., c + c1)) * MB_LEN_MAX) */
-	char buff[5]; /* max vis-encoding length for one char + NUL */
+	char mbibuff[2 * MB_LEN_MAX + 1]; /* max space for 2 wchars */
+	char buff[4 * MB_LEN_MAX + 1]; /* max encoding length for one char */
 	int mbilen, cerr = 0, raerr = 0;
 	
         /*
@@ -189,8 +189,9 @@ process(FILE *fp)
 		/* Clear multibyte input buffer. */
 		memset(mbibuff, 0, sizeof(mbibuff));
 		/* Read-ahead next multibyte character. */
-		rachar = getwc(fp);
-		if (rachar == WEOF && errno == EILSEQ) {
+		if (!cerr)
+			rachar = getwc(fp);
+		if (cerr || (rachar == WEOF && errno == EILSEQ)) {
 			/* Error in multibyte data.  Read one byte. */
 			rachar = (wint_t)getc(fp);
 			raerr = 1;
@@ -245,7 +246,8 @@ process(FILE *fp)
 			else
 				wctomb(mbibuff + mbilen, c1);
 			/* Perform encoding on just first character. */
-			(void)strsvisx(buff, mbibuff, 1, eflags, extra);
+			(void) strsenvisx(buff, 4 * MB_LEN_MAX, mbibuff,
+			    1, eflags, extra, &cerr);
 		}
 
 		cp = buff;
@@ -265,7 +267,6 @@ process(FILE *fp)
 		} while (*++cp);
 		c = rachar;
 		cerr = raerr;
-		raerr = 0;
 	}
 	/*
 	 * terminate partial line with a hidden newline

Reply via email to