socsvn commit: r224290 - in soc2011/zy/nvi-iconv/head/contrib/nvi2: common vi

zy at FreeBSD.org zy at FreeBSD.org
Sat Jul 16 06:05:19 UTC 2011


Author: zy
Date: Sat Jul 16 06:05:16 2011
New Revision: 224290
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=224290

Log:
  Updates to git:8ed5ed8.
  
  The frozen problem is caused by a malformed a UTF-8 file. Now we properly
  handles the unprintable characters.
  
  A big problem, iconv does not apply to line-oriented operations, was
  detected and solved.

Modified:
  soc2011/zy/nvi-iconv/head/contrib/nvi2/common/conv.h
  soc2011/zy/nvi-iconv/head/contrib/nvi2/common/line.c
  soc2011/zy/nvi-iconv/head/contrib/nvi2/vi/vs_refresh.c

Modified: soc2011/zy/nvi-iconv/head/contrib/nvi2/common/conv.h
==============================================================================
--- soc2011/zy/nvi-iconv/head/contrib/nvi2/common/conv.h	Sat Jul 16 02:13:03 2011	(r224289)
+++ soc2011/zy/nvi-iconv/head/contrib/nvi2/common/conv.h	Sat Jul 16 06:05:16 2011	(r224290)
@@ -10,7 +10,7 @@
  */
 
 #define KEY_COL(sp, ch)							\
-	(INTISWIDE(ch) ? CHAR_WIDTH(sp, ch) ? CHAR_WIDTH(sp, ch) : 	\
+	(INTISWIDE(ch) ? CHAR_WIDTH(sp, ch) > 0 ? CHAR_WIDTH(sp, ch) : 	\
 					      1 : /* extra space */	\
 			 KEY_LEN(sp,ch))
 

Modified: soc2011/zy/nvi-iconv/head/contrib/nvi2/common/line.c
==============================================================================
--- soc2011/zy/nvi-iconv/head/contrib/nvi2/common/line.c	Sat Jul 16 02:13:03 2011	(r224289)
+++ soc2011/zy/nvi-iconv/head/contrib/nvi2/common/line.c	Sat Jul 16 06:05:16 2011	(r224290)
@@ -139,13 +139,6 @@
 	}
 
 	/* Look-aside into the cache, and see if the line we want is there. */
-	/*
-	 * Line cache will not work if different screens view the same
-	 * file with different encodings.
-	 * Multiple threads accessing the same cache can be a problem as
-	 * well.
-	 * So, line cache is (temporarily) disabled.
-	 */
 	if (0 && lno == ep->c_lno) {
 #if defined(DEBUG) && 0
 	TRACE(sp, "retrieve cached line %lu\n", (u_long)lno);
@@ -287,6 +280,8 @@
 {
 	DBT data, key;
 	EXF *ep;
+	char *fp;
+	size_t flen;
 	int rval;
 
 #if defined(DEBUG) && 0
@@ -298,11 +293,13 @@
 		return (1);
 	}
 		
+	INT2FILE(sp, p, len, fp, flen);
+
 	/* Update file. */
 	key.data = &lno;
 	key.size = sizeof(lno);
-	data.data = p;
-	data.size = len;
+	data.data = fp;
+	data.size = flen;
 	SIGBLOCK;
 	if (ep->db->put(ep->db, &key, &data, R_IAFTER) == -1) {
 		msgq(sp, M_SYSERR,
@@ -360,6 +357,8 @@
 {
 	DBT data, key;
 	EXF *ep;
+	char *fp;
+	size_t flen;
 	int rval;
 
 #if defined(DEBUG) && 0
@@ -372,11 +371,13 @@
 		return (1);
 	}
 		
+	INT2FILE(sp, p, len, fp, flen);
+		
 	/* Update file. */
 	key.data = &lno;
 	key.size = sizeof(lno);
-	data.data = p;
-	data.size = len;
+	data.data = fp;
+	data.size = flen;
 	SIGBLOCK;
 	if (ep->db->put(ep->db, &key, &data, R_IBEFORE) == -1) {
 		msgq(sp, M_SYSERR,
@@ -546,15 +547,10 @@
 	key.size = sizeof(lno);
 
 	switch (ep->db->seq(ep->db, &key, &data, R_LAST)) {
-        case -1:
-		msgq(sp, M_SYSERR, "007|unable to get last line");
-		*lnop = 0;
-		return (1);
-        case 1:
+	case 1:
 		*lnop = 0;
 		return (0);
-	default:
-		break;
+	case -1:
 alloc_err:
 		msgq(sp, M_DBERR, "007|unable to get last line");
 		*lnop = 0;

Modified: soc2011/zy/nvi-iconv/head/contrib/nvi2/vi/vs_refresh.c
==============================================================================
--- soc2011/zy/nvi-iconv/head/contrib/nvi2/vi/vs_refresh.c	Sat Jul 16 02:13:03 2011	(r224289)
+++ soc2011/zy/nvi-iconv/head/contrib/nvi2/vi/vs_refresh.c	Sat Jul 16 06:05:16 2011	(r224290)
@@ -804,13 +804,13 @@
 				++p;
 				break;
 			}
-			if ((curlen += KEY_COL(sp, *p)) > cols) {
+			if ((curlen += KEY_LEN(sp, *p)) > cols) {
 				ellipsis = 3;
 				curlen +=
-				    KEY_COL(sp, '.') * 3 + KEY_COL(sp, ' ');
+				    KEY_LEN(sp, '.') * 3 + KEY_LEN(sp, ' ');
 				while (curlen > cols) {
 					++p;
-					curlen -= KEY_COL(sp, *p);
+					curlen -= KEY_LEN(sp, *p);
 				}
 				break;
 			}
@@ -818,13 +818,13 @@
 		if (ellipsis) {
 			while (ellipsis--)
 				(void)gp->scr_addstr(sp,
-				    KEY_NAME(sp, '.'), KEY_COL(sp, '.'));
+				    KEY_NAME(sp, '.'), KEY_LEN(sp, '.'));
 			(void)gp->scr_addstr(sp,
-			    KEY_NAME(sp, ' '), KEY_COL(sp, ' '));
+			    KEY_NAME(sp, ' '), KEY_LEN(sp, ' '));
 		}
 		for (; *p != '\0'; ++p)
 			(void)gp->scr_addstr(sp,
-			    KEY_NAME(sp, *p), KEY_COL(sp, *p));
+			    KEY_NAME(sp, *p), KEY_LEN(sp, *p));
 	}
 
 	/* Clear the rest of the line. */
@@ -877,7 +877,7 @@
 		if (O_ISSET(sp, O_SHOWMODE)) {
 			if (F_ISSET(sp->ep, F_MODIFIED))
 				(void)gp->scr_addstr(sp,
-				    KEY_NAME(sp, '*'), KEY_COL(sp, '*'));
+				    KEY_NAME(sp, '*'), KEY_LEN(sp, '*'));
 			(void)gp->scr_addstr(sp, t, len);
 		}
 	}


More information about the svn-soc-all mailing list