socsvn commit: r227168 - in soc2011/zy/nvi-iconv/head:
contrib/nvi2/common contrib/nvi2/ex rescue/rescue
zy at FreeBSD.org
zy at FreeBSD.org
Fri Oct 28 20:02:02 UTC 2011
Author: zy
Date: Fri Oct 28 20:01:59 2011
New Revision: 227168
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=227168
Log:
Updates to git:efb98f7
* Fix linking 'rescue' on stable/8.
* Handles UTF-16 with less hacks.
* Handles all CJK encodings with GB18030.
* Now it's possible to build with widechar but not iconv.
Modified:
soc2011/zy/nvi-iconv/head/contrib/nvi2/common/conv.c
soc2011/zy/nvi-iconv/head/contrib/nvi2/common/exf.c
soc2011/zy/nvi-iconv/head/contrib/nvi2/common/exf.h
soc2011/zy/nvi-iconv/head/contrib/nvi2/common/key.c
soc2011/zy/nvi-iconv/head/contrib/nvi2/ex/ex_write.c
soc2011/zy/nvi-iconv/head/rescue/rescue/Makefile
Modified: soc2011/zy/nvi-iconv/head/contrib/nvi2/common/conv.c
==============================================================================
--- soc2011/zy/nvi-iconv/head/contrib/nvi2/common/conv.c Fri Oct 28 17:53:34 2011 (r227167)
+++ soc2011/zy/nvi-iconv/head/contrib/nvi2/common/conv.c Fri Oct 28 20:01:59 2011 (r227168)
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "$Id: conv.c,v 1.29 2011/08/13 12:53:23 zy Exp $ (Berkeley) $Date: 2011/08/13 12:53:23 $";
+static const char sccsid[] = "$Id: conv.c,v 1.30 2011/10/27 17:38:13 zy Exp $ (Berkeley) $Date: 2011/10/27 17:38:13 $";
#endif /* not lint */
#include <sys/types.h>
@@ -91,11 +91,9 @@
size_t *tolen, CHAR_T **dst, char *enc)
{
/* XXX UTF-16 linesep hack */
-#ifdef USE_ICONV
- if (!strncasecmp(enc, "utf-16", 6) && len % 2)
- if (str[--len] != '\0') /* shortern by 1 */
+ if (enc && !strncasecmp(enc, "utf-16", 6) && len % 2)
+ if (--len, !strncasecmp(enc, "utf-16le", 8))
str++; /* shift if LE */
-#endif
int i = 0, j;
CHAR_T **tostr = &cw->bp1.wc;
@@ -113,7 +111,7 @@
BINC_RETW(NULL, *tostr, *blen, nlen);
#ifdef USE_ICONV
- if (strcmp(nl_langinfo(CODESET), enc)) {
+ if (strcasecmp(nl_langinfo(CODESET), enc)) {
id = iconv_open(nl_langinfo(CODESET), enc);
if (id == (iconv_t)-1)
goto err;
@@ -139,16 +137,20 @@
}
*tolen = i;
+#ifdef USE_ICONV
if (id != (iconv_t)-1)
iconv_close(id);
+#endif
*dst = cw->bp1.wc;
return 0;
err:
*tolen = i;
+#ifdef USE_ICONV
if (id != (iconv_t)-1)
iconv_close(id);
+#endif
*dst = cw->bp1.wc;
return error;
@@ -262,7 +264,7 @@
dst = *tostr; buflen = *blen;
#ifdef USE_ICONV
- if (strcmp(nl_langinfo(CODESET), enc)) {
+ if (strcasecmp(nl_langinfo(CODESET), enc)) {
id = iconv_open(enc, nl_langinfo(CODESET));
if (id == (iconv_t)-1)
goto err;
@@ -333,13 +335,30 @@
if (orig != NULL)
MEMCPY(&sp->conv, &orig->conv, 1);
else {
+ char *ctp;
setlocale(LC_ALL, "");
#ifdef USE_WIDECHAR
+ ctp = strchr(setlocale(LC_CTYPE, NULL), '.');
+ if (ctp) ++ctp;
+ /*
+ * The CJK hacks try to use GB18030 to handle
+ * eucCN, eucJP, eucKR, GB2312, GBK, CP949, CP936.
+ *
+ * XXX
+ * This fixes the libncursesw limitaions (GB2312, GBK, and CP949
+ * do not work) on FreeBSD at the same time.
+ */
+ if (!strncmp(ctp, "euc", 3) || !strncmp(ctp, "GB", 2) ||
+ !strcmp(ctp, "CP949") || !strcmp(ctp, "CP936"))
+ setlocale(LC_CTYPE, "zh_CN.GB18030");
+
sp->conv.sys2int = cs_char2int;
sp->conv.int2sys = cs_int2char;
sp->conv.file2int = fe_char2int;
sp->conv.int2file = fe_int2char;
sp->conv.input2int = ie_char2int;
+#elif __linux__
+ setlocale(LC_CTYPE, "");
#endif
#ifdef USE_ICONV
o_set(sp, O_INPUTENCODING, OS_STRDUP, nl_langinfo(CODESET), 0);
@@ -415,6 +434,7 @@
return 0;
err:
+#endif
switch (option) {
case O_FILEENCODING:
msgq(sp, M_ERR,
@@ -425,7 +445,6 @@
"322|Input encoding conversion not supported");
break;
}
-#endif
return 1;
}
Modified: soc2011/zy/nvi-iconv/head/contrib/nvi2/common/exf.c
==============================================================================
--- soc2011/zy/nvi-iconv/head/contrib/nvi2/common/exf.c Fri Oct 28 17:53:34 2011 (r227167)
+++ soc2011/zy/nvi-iconv/head/contrib/nvi2/common/exf.c Fri Oct 28 20:01:59 2011 (r227168)
@@ -1251,7 +1251,6 @@
char *np;
db_rget(sp, 1, &p, &len);
if ((np = malloc(len-2))) {
- memcpy(ep->bom.c, p, 2);
memcpy(np, p+2, len-2);
db_rset(sp, 1, np, len-2); /* store w/o the BOM */
free(np);
Modified: soc2011/zy/nvi-iconv/head/contrib/nvi2/common/exf.h
==============================================================================
--- soc2011/zy/nvi-iconv/head/contrib/nvi2/common/exf.h Fri Oct 28 17:53:34 2011 (r227167)
+++ soc2011/zy/nvi-iconv/head/contrib/nvi2/common/exf.h Fri Oct 28 20:01:59 2011 (r227168)
@@ -6,7 +6,7 @@
*
* See the LICENSE file for redistribution information.
*
- * $Id: exf.h,v 10.8 2011/08/13 17:59:41 zy Exp $ (Berkeley) $Date: 2011/08/13 17:59:41 $
+ * $Id: exf.h,v 10.8 2011/10/27 00:35:26 zy Exp $ (Berkeley) $Date: 2011/10/27 00:35:26 $
*/
/* Undo direction. */
/*
@@ -17,10 +17,6 @@
int refcnt; /* Reference count. */
/* Underlying database state. */
- union {
- uint16_t i; /* Byte-order-mark */
- char c[2];
- } bom;
DB *db; /* File db structure. */
CHAR_T *c_lp; /* Cached line. */
size_t c_len; /* Cached line length. */
Modified: soc2011/zy/nvi-iconv/head/contrib/nvi2/common/key.c
==============================================================================
--- soc2011/zy/nvi-iconv/head/contrib/nvi2/common/key.c Fri Oct 28 17:53:34 2011 (r227167)
+++ soc2011/zy/nvi-iconv/head/contrib/nvi2/common/key.c Fri Oct 28 20:01:59 2011 (r227168)
@@ -21,7 +21,6 @@
#include <ctype.h>
#include <errno.h>
#include <limits.h>
-#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -109,22 +108,6 @@
gp = sp->gp;
- /*
- * XXX
- * 8-bit only, for now. Recompilation should get you any 8-bit
- * character set, as long as nul isn't a character.
- */
- (void)setlocale(LC_ALL, "");
-#if __linux__
- /*
- * In libc 4.5.26, setlocale(LC_ALL, ""), doesn't setup the table
- * for ctype(3c) correctly. This bug is fixed in libc 4.6.x.
- *
- * This code works around this problem for libc 4.5.x users.
- * Note that this code is harmless if you're using libc 4.6.x.
- */
- (void)setlocale(LC_CTYPE, "");
-#endif
v_key_ilookup(sp);
v_keyval(sp, K_CNTRLD, KEY_VEOF);
Modified: soc2011/zy/nvi-iconv/head/contrib/nvi2/ex/ex_write.c
==============================================================================
--- soc2011/zy/nvi-iconv/head/contrib/nvi2/ex/ex_write.c Fri Oct 28 17:53:34 2011 (r227167)
+++ soc2011/zy/nvi-iconv/head/contrib/nvi2/ex/ex_write.c Fri Oct 28 20:01:59 2011 (r227168)
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "$Id: ex_write.c,v 10.39 2011/08/13 18:28:15 zy Exp $ (Berkeley) $Date: 2011/08/13 18:28:15 $";
+static const char sccsid[] = "$Id: ex_write.c,v 10.40 2011/10/27 00:28:35 zy Exp $ (Berkeley) $Date: 2011/10/27 00:28:35 $";
#endif /* not lint */
#include <sys/types.h>
@@ -318,14 +318,15 @@
lcnt = 0;
msg = "253|Writing...";
-#ifdef USE_ICONV
- isutf16 = !strncasecmp(O_STR(sp, O_FILEENCODING), "utf-16", 6);
-#else
- isutf16 = 0;
-#endif
+ if (O_STR(sp, O_FILEENCODING)) {
+ isutf16 = !strncasecmp(O_STR(sp, O_FILEENCODING), "utf-16", 6);
+ isutf16 += !strncasecmp(O_STR(sp, O_FILEENCODING), "utf-16le", 8);
+ } else isutf16 = 0;
if (tline != 0) {
- if (sp->ep->bom.i && fwrite(&sp->ep->bom.i, 2, 1, fp) != 1)
+ if (isutf16 == 1 && fwrite("\xfe\xff", 1, 2, fp) != 2)
+ goto err;
+ if (isutf16 == 2 && fwrite("\xff\xfe", 1, 2, fp) != 2)
goto err;
for (; fline <= tline; ++fline, ++lcnt) {
/* Caller has to provide any interrupt message. */
@@ -345,10 +346,10 @@
goto err;
ccnt += len;
/* UTF-16 w/o BOM is big-endian */
- if (isutf16 && sp->ep->bom.c[0] != '\xff') { /* UTF-16BE */
+ if (isutf16 == 1) { /* UTF-16BE */
if (fwrite("\0\x0a", 1, 2, fp) != 2)
break;
- } else if (sp->ep->bom.c[0] == '\xff') { /* UTF-16LE */
+ } else if (isutf16 == 2) { /* UTF-16LE */
if (fwrite("\x0a\0", 1, 2, fp) != 2)
break;
} else if (putc('\n', fp) != '\n')
Modified: soc2011/zy/nvi-iconv/head/rescue/rescue/Makefile
==============================================================================
--- soc2011/zy/nvi-iconv/head/rescue/rescue/Makefile Fri Oct 28 17:53:34 2011 (r227167)
+++ soc2011/zy/nvi-iconv/head/rescue/rescue/Makefile Fri Oct 28 20:01:59 2011 (r227168)
@@ -118,13 +118,13 @@
# crunchgen does not like C++ programs; this should be fixed someday
# CRUNCH_PROGS+= devd
+CRUNCH_LIBS+= -lalias -lcam -ldevstat -lipsec
.ifdef (WITH_ICONV)
CRUNCH_LIBS+= -lcursesw
.else
CRUNCH_LIBS+= -lcurses -ltermcap
.endif
-CRUNCH_LIBS+= -lalias -lcam -ldevstat -lipsec
.if ${MK_IPX} != "no"
CRUNCH_LIBS+= -lipx
.endif
More information about the svn-soc-all
mailing list