From owner-FreeBSD-users-jp@jp.freebsd.org  Thu Jul 25 19:47:43 1996
Received: by mail.jp.freebsd.org (8.7.3+2.6Wbeta5/8.7.3) id TAA17102
	Thu, 25 Jul 1996 19:47:43 +0900 (JST)
Received: by mail.jp.freebsd.org (8.7.3+2.6Wbeta5/8.7.3) with SMTP id TAA17097
	for <FreeBSD-users-jp@jp.freebsd.org>; Thu, 25 Jul 1996 19:47:38 +0900 (JST)
Received: from sjc.yokogawa.co.jp.yokogawa.co.jp ([133.140.4.100]) by yokogawa.co.jp (8.6.9+2.4Wb3/3.3Wb4-firewall:08/09/94) with ESMTP id TAA13095 for <FreeBSD-users-jp@jp.freebsd.org>; Thu, 25 Jul 1996 19:47:16 +0900
Received: from leia.pa.yokogawa.co.jp by sjc.yokogawa.co.jp.yokogawa.co.jp (8.7.1+2.6Wbeta4/6.4J.6-YOKOGAWA-R/GW)
	id TAA10523; Thu, 25 Jul 1996 19:47:15 +0900 (JST)
Received: from sapphire by leia.pa.yokogawa.co.jp (1.38.193.4/6.4J.6-YOKOGAWA/pa)
	id AA12659; Thu, 25 Jul 1996 19:47:14 +0900
Received: from localhost by sapphire.pa.yokogawa.co.jp (8.6.12/3.3Wb)
	id TAA00243; Thu, 25 Jul 1996 19:47:11 +0900
Message-Id: <199607251047.TAA00243@sapphire.pa.yokogawa.co.jp>
To: FreeBSD-users-jp@jp.freebsd.org
Cc: kimura@pa.yokogawa.co.jp
From: =?ISO-2022-JP?B?GyRCRURDZkh+SmY7UhsoQg==?= <mihoko@pa.yokogawa.co.jp>
X-Mailer: Mew version 1.06 on Emacs 19.28.2, Mule 2.3
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Date: Thu, 25 Jul 1996 19:47:10 +0900
Reply-To: FreeBSD-users-jp@jp.freebsd.org
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=19]
X-Sequence: FreeBSD-users-jp 3382
Subject: [FreeBSD-users-jp 3382] mblen(3) problem & patch
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org


$B$3$s$K$A$O(B $BEDCfH~Jf;R!w2#2OEE5!$G$9!#(B

FreeBSD $B$N(B mblen(3) $B$K$O!"%P%0$,$"$C$F(B
$BNc$($P%3!<%I%;%C%H(B1 $B$N>l9g$K(B 2byte $BL\$K(B MSB $B$,N)$C$F$$$J$$>l9g$b!"%((B
$B%i!<(B(-1)$B$K$J$i$:$K!"(B2 $B$,JV$C$F$-$^$9!#(B

$B$=$l$KBP$7$F!"0J2<$N$h$&$J%Q%C%A(B(/usr/src/lib/libc/locale/euc.c)$B$r$D(B
$B$/$C$F$_$^$7$?!#0l1~(B $B$&$^$/F0$$$F$$$k$h$&$G$9!#(B

$B$=$N:]$K!"(Blocale $B$N%G!<%?%Y!<%9$r8+$F$$$F!"$A$g$C$H$*$+$7$$$J!"$H;W$C(B
$B$?$N$G$9$,!"(B 
ja_JP.EUC $B$N(B LC_TYPE $B$N:G8e$K!"<!$N$h$&$J5-=R$,$"$j$^$9!#(B
(/usr/src/usr.bin/mklocale/data/ja_JP.EUC $B$h$j(B)

/*
 * This is for Code Set 3, half-width kana
 */
SPECIAL         0xa1 - 0xdf
PHONOGRAM       0xa1 - 0xdf
CONTROL         0x84 - 0x97 0x9b - 0x9f 0xe0 - 0xfe

$B$*$+$7$$$H;W$C$?$N$O!"$3$N(B CONTROL $B$N5-=R$G!"(B
$B$I$&$7$F(B CONTROL $B$K(B 0xe0 - 0xfe $B$,F~$C$F$$$k$N$+$H$$$&$3$H$G$9!#(B
$B3N$+(B ISO-2022, ISO-6937 (?)$B$N5,Dj$G$O!"(B0xa0 - 0xff $B$^$G$O!"J8;z$rDj(B
$B5A$9$k$?$a$NNN0h$H$J$C$F$$$?$H;W$$$^$9!#(B

$B%3%s%H%m!<%k%3!<%I$O(B

	Control Characters		EUC Representation
     ----------------------------------------------------------------
	Space				00100000
	Delete				01111111
	Control Character Set 0 (C0)	000xxxxx
	Control Character Set 0 (C1)	100xxxxx

$B$HDj5A$5$l$F$$$?$h$&$K;W$$$^$9!#(B

$B3N$+$K!"%3!<%I%;%C%H(B3 $B$G$O!"(B0xe0 - 0xfe $B$NNN0h$K$OJ8;z$ODj5A$5$l$F$$(B
$B$^$;$s$,!"$@$+$i$H$$$C$F(B $B$=$3$r(B $B%3%s%H%m!<%k%3!<%I$H$7$F2r<a$7$F$7$^(B
$B$&$N$O(B $B$*$+$7$$$h$&$K;W$&$N$G$9$,!"$I$&$J$N$G$7$g$&$+!)(B

$B$3$N$"$?$j$K>\$7$$$+$?$,$$$i$C$7$c$$$^$7$?$i(B $B$40U8+$rJ9$+$;$F$/$@$5(B
$B$$!#$h$m$7$/$*4j$$$7$^$9(B _o_
---------------------- cut cut cut ------------------------------------
--- euc.c	Thu May 26 22:56:45 1994
+++ euc.c.new	Thu Jul 25 19:12:36 1996
@@ -136,6 +136,7 @@
 {
 	rune_t rune = 0;
 	int len, set;
+	unsigned char c;
 
 	if (n < 1 || (len = CEI->count[set = _euc_set(*string)]) > n) {
 		if (result)
@@ -147,11 +148,20 @@
 	case 2:
 		--len;
 		++string;
-		/* FALLTHROUGH */
 	case 1:
+		while (len-- > 0) {
+			/* '0x80-0x9f' are control codes */
+			if ((c = (unsigned char)*string++) < 0xa0) {
+				if (result)
+					*result = string;
+				return (_INVALID_RUNE);
+			};
+			rune = (rune << 8) | ((u_int)(c) & 0xff);
+		}
+		break;
+		/* FALLTHROUGH */
 	case 0:
-		while (len-- > 0)
-			rune = (rune << 8) | ((u_int)(*string++) & 0xff);
+		rune = (u_int)(*string++) & 0xff;
 		break;
 	}
 	if (result)
---------------------- cut cut cut ------------------------------------
--
Mihoko Tanaka
<mihoko@pa.yokogawa.co.jp>
