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