Date: Sat, 16 Jul 2011 06:05:16 +0000 From: zy@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r224290 - in soc2011/zy/nvi-iconv/head/contrib/nvi2: common vi Message-ID: <20110716060516.DB0CA1065672@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110716060516.DB0CA1065672>