From owner-FreeBSD-tech-jp@jp.freebsd.org  Mon Nov  2 18:00:10 1998
Received: (from daemon@localhost)
	by jaz.jp.freebsd.org (8.9.1+3.1W/8.7.3) id SAA06011;
	Mon, 2 Nov 1998 18:00:10 +0900 (JST)
	(envelope-from owner-FreeBSD-tech-jp@jp.FreeBSD.org)
Received: from algol.am.ics.keio.ac.jp (algol.am.ics.keio.ac.jp [131.113.69.9])
	by jaz.jp.freebsd.org (8.9.1+3.1W/8.7.3) with ESMTP id SAA05999
	for <FreeBSD-tech-jp@jp.freebsd.org>; Mon, 2 Nov 1998 18:00:07 +0900 (JST)
	(envelope-from keisuke@am.ics.keio.ac.jp)
Received: from localhost (localhost [127.0.0.1])
	by algol.am.ics.keio.ac.jp (8.9.1a/3.7W) with ESMTP id SAA15894
	for <FreeBSD-tech-jp@jp.freebsd.org>; Mon, 2 Nov 1998 18:00:07 +0900 (JST)
To: FreeBSD-tech-jp@jp.freebsd.org
In-Reply-To: Your message of "Sat, 31 Oct 1998 17:31:38 +0900 (JST)"
	<199810310831.RAA12779@pot026.yamaha-motor.co.jp>
References: <199810310831.RAA12779@pot026.yamaha-motor.co.jp>
X-Mailer: Mew version 1.93 on Emacs 20.3 / Mule 4.0 (HANANOEN)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Message-Id: <19981102180006M.keisuke@am.ics.keio.ac.jp>
Date: Mon, 02 Nov 1998 18:00:06 +0900
From: Keisuke Inoue <keisuke@am.ics.keio.ac.jp>
X-Dispatcher: imput version 980905(IM100)
Lines: 196
Reply-To: FreeBSD-tech-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+980914
X-Sequence: FreeBSD-tech-jp 1886
Subject: [FreeBSD-tech-jp 1886] Re: ansi.c patch for ja-netscape
Errors-To: owner-FreeBSD-tech-jp@jp.freebsd.org
Sender: owner-FreeBSD-tech-jp@jp.freebsd.org
X-Originator: keisuke@am.ics.keio.ac.jp

$B0f>e!w7DXf(B($BLp>e(B)$B$G$9!#(B


  Tetsuya Kimura <kimura@kaiseki.yamaha-motor.co.jp>
$B!?!1!1!1!1!1!1!1(B
> $B4{$KD9IM$5$s$+$i$NJs9p$K$"$j$^$7$?$,!"(Bwcstombs $B$H(B mbstowcs $B$,8F$P$l$k(B
> $B=gHV$,LGCcLGCc$K$J$C$F$$$k$?$a$K8G$^$k$h$&$G$9!#(B
> $B$G!"1Q8l$+F|K\8l$+$H$$$&$3$H$K$O4X78$J$/!"(BMultibyte $B$N(B locale
> $B$r;H$&$H8G$^$k$s$@$H;W$$$^$9!#(B
	(snip)
> $B$H$j$"$($:!"(Bcommunicator $B$r0BDj$5$;$k$?$a$K!">e$N$h$&$J%Q%?!<%s(B
> $B$rHr$1$k$h$&$J%Q%C%A$rEv$F$F;H$C$F$$$^$9!#(B
> 
> $B$3$s$J$b$N$r8x3+$7$F$7$^$C$F$$$$$N$+$H$$$&5$$b$7$^$9$,!"(B
> netscape $B$,BP1~$7$F$/$l$k$^$G$N$D$J$.$H$$$&$3$H$G!#(B
> /usr/src/lib/libc/locale/ansi.c $B$X$N%Q%C%A$G$9!#(B

[FreeBSD-tech-jp 1882]$B$NLZB<$5$s$N%Q%C%A(B
$B$r;n$7$F$_$^$7$?$,!"%Z!<%8$rI=<($7$?$H$-$K(B<INPUT>$B$NCf?H$,>C(B
$B$($F$7$^$$$^$9!#F|K\8l(B/ASCII$B!"F~NO(B/$B=i4|J8;zNs$OLd$o$:$G$9!#(B
<INPUT>$B$N(BVALUE$B$O(B<INPUT TYPE=reset>$B$r2!$;$PI=<($5$l$^$9!#6C$$(B
$B$?$3$H$K(B<INPUT TYPE=password>$B$N%?%0$G$O%Q%9%o!<%I$,4]8+$($K(B
$B$J$j$^$7$?!#(B


$B7k6I!"8=>u$G$O(B
[FreeBSD-tech-jp 1823]$B$ND9IM$5$s$N%Q%C%A(B
[FreeBSD-tech-jp 1823]$B$ND9IM$5$s$N6/0z%Q%C%A(B
$B$NAH$_9g$o$;$+!"(B
[FreeBSD-tech-jp 1843]$B$NLZB<$5$s$N%Q%C%A(B
[FreeBSD-tech-jp 1823]$B$ND9IM$5$s$N6/0z%Q%C%A(B
$B$NAH9g$o$;$,(Bcomunicator$B$N8+$+$1$NF0:n$,0lHV$^$H$b$G$9!#(B
$B$=$3$G!"(B[FreeBSD-tech-jp 1823]$B%Y!<%9$G0J2<$NBP1~$r$7$F$_$^$7$?!#(B


> $B@0M}$9$k$H(B
> $B8=>u(B: mbstowcs(NULL, s0, 0) -> wcstombs(s1, s0, n) -> wcstombs(s2, s1, n)
> $B@52r(B: mbstowcs(NULL, s0, 0) -> mbstowcs(s1, s0, n) -> wcstombs(s2, s1, n)


$B$H$j$"$($:(Bprintf$B$7$F$_$k$H(B
mbstowcs(NULL, s0, 0) -> wcstombs(s1, s0, n) -> mbstowcs(s2, s1, n)
$B$H$$$&%Q%?!<%s$O=P$F$-$^$7$?$,!"(B
mbstowcs(NULL, s0, 0) -> wcstombs(s1, s0, n) -> wcstombs(s2, s1, n)
$B$O$"$j$^$;$s$G$7$?!#$^$?!"@52r$NJ}$N(B
mbstowcs(NULL, s0, 0) -> mbstowcs(s1, s0, n) -> wcstombs(s2, s1, n)
$B$G$9$,!"(Bwcstombs(s1, s0, n)$B$G(Bmbstowcs(s1, s0, n)$B$r8F$S=P$9$H(B
$B3N<B$K(Bcommunicator$B$,8G$^$j$^$9!#$d$C$?FbMF$r%Q%C%A$H$7$F%a!<(B
$B%k$KE:IU$7$^$9!#D9IM$5$s$N%Q%C%A$,(B2$B$D$H$bEv$?$C$F$$$k(B ansi.c
$B$KBP$9$k%Q%C%A$G$9!#(B($BCm0U!"$3$l$O(Bnetscape$BBP:v$N<B83MQ$G$9!#(B)


  Satoshi Nagahama <nagahama@tfc.co.jp>
$B!?!1!1!1!1!1!1!1(B
> $BD9IM$G$9!#(B
> patch$B$rN.$7$F$+$i5^$KK;$7$/$J$j>/$7N%$l$F$$$^$7$?!#(B
> $B$7$+$b$=$N4V$K$3$N%9%l%C%I$O$:$$$V$s:.Mp$7$F$$$k$_$?$$$G$9$M!&!&!&(B

(^^;


> > $B@0M}$9$k$H(B
> > $B8=>u(B: mbstowcs(NULL, s0, 0) -> wcstombs(s1, s0, n) -> wcstombs(s2, s1, n)
> > $B@52r(B: mbstowcs(NULL, s0, 0) -> mbstowcs(s1, s0, n) -> wcstombs(s2, s1, n)
> >
> > $B$^$?!"(Bmbstowcs(NULL, s0, 0) $B$G<hF@$5$l$?J8;z?t$OFC$KM-8z$K$O(B
> > $B;H$o$l$F$$$J$$$_$?$$$J$N$G!"(Bansi.c $B$N%Q%C%A$rEv$F$F$b$"$^$j(B
> > $B0BDj@-$O2~A1$5$l$J$$$s$8$c$J$$$+$H;W$C$F$$$^$9!#(B
> 
> $B$3$l$O$A$g$C$H0c$$$^$9$M!#(B
> $B!V(Bmbstowcs(NULL, s0, 0) $B$G<hF@$5$l$?J8;z?t$O(B*$B$"$^$j(B*$BM-8z$K$O(B
> $B;H$o$l$F$$$J$$!J>/$7$OM-8z$K;H$o$l$F$$$k!K!W(B
> $B$,@52r$G$9!#(B
> 
> $B$J$<$J$i(Bmbstowcs(NULL, s0, 0)$B$,8F$P$l$?8e!"$=$NJV$jCM$r(Bret$B$H$9$k$H(B
> $B62$i$/(Bmalloc(ret*size)$B$,8F$P$l!J$b$7(Bmbstowcs$B$,J8;z?t$rJV$5$:$K(B
> -1$B$rJV$7$F$$$?$i$3$3$GBgJQ$J$3$H$K$J$j$^$9$M!K(B
> 
> $B$=$7$F!"<!$K8F$P$l$k(Bwcstombs$B$O<B:]$K(Bwcstombs(s1, s0, ret*3)$B$N$h$&$K(B
> $B8F$P$l$F$$$^$9!#;d$,0JA0(Bwcstombs$B$K(B-3$B$,EO$C$F$$$k$H8@$C$F$$$?$N$O(B
> $B$3$N$?$a$G$9!#$^$?!"$3$3$G(B'*3'$B$H$J$C$F$$$k$N$O$*$=$i$/(B
> MB_CUR_MAX$B$NCM$+$i$G$"$k$H9M$($i$l$^$9!#(B

$B3NG'$G$-$^$7$?!#$3$3$G!"$b$7(Bwcstombs$B$NBe$j$K@5$7$$$H8@$o$l$F(B
$B$$$k(Bmbstowcs$B$r8F$S=P$9>l9g!"(Bmbstowcs(s1, s0, ret*3)$B$GNI$$$N(B
$B$G$7$g$&$+!#$=$l$H$b(Bmbstowcs(s1, s0, ret)$B$G$7$g$&$+!#(B
	  $B!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2(B  $B!2!2(B
	  $B!@(B $B0f>e(B $B7I2p!w7DXf(B($BLp>e(B) $BGn;N2]Dx(B $B!@!@!?(B
	$B!?!@!@(B     $B7W;;5!2J3X@l96(B  $BE7Ln8&5f<<(B $B!@(B
	$B!1!1(B  $B!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1(B


--- ansi.c.0+gouin	Fri Oct 30 00:57:42 1998
+++ ansi.c	Mon Nov  2 03:41:41 1998
@@ -43,6 +43,11 @@
 #include <stddef.h>
 #include <rune.h>
 
+int wcsflag = 0;
+int mbsflag = 0;
+char *wcsmbsp = NULL;
+const char *mbsmbsp = NULL;
+
 int
 mblen(s, n)
 	const char *s;
@@ -105,6 +110,26 @@
 	char const *e;
 	int cnt = 0;
 
+	fprintf(stderr, "mbstowcs(%08x, %08x, %d)\n", pwcs, s, n);
+	fflush(stderr);
+	if ((pwcs == NULL) && (n == 0)) {
+		fprintf(stderr, "warning: mbstowcs: flag initialized\n");
+		fflush(stderr);
+		mbsflag = 1;
+		mbsmbsp = s;
+	} else {
+		mbsflag = 0;
+		mbsmbsp = NULL;
+	}
+#if 0
+	if (wcsflag && ((int)s == (int)wcsmbsp)) {
+		fprintf(stderr, "warning: mbstowcs: jump to wcstombs\n");
+		fflush(stderr);
+		return wcstombs((char *)pwcs, (wchar_t *)s, n);
+//		return wcstombs(s, pwcs, n);
+	}
+#endif
+
 	if (!s)
 		return (-1);
 
@@ -115,6 +140,8 @@
 			s = e;
 			++cnt;
 		}
+		fprintf(stderr, "return (%d)\n", cnt);
+		fflush(stderr);
 		return (cnt);
 	}
 	while (n-- > 0) {
@@ -126,6 +153,8 @@
 		s = e;
 		++cnt;
 	}
+	fprintf(stderr, "return (%d)\n", cnt);
+	fflush(stderr);
 	return (cnt);
 }
 
@@ -138,10 +167,28 @@
 	char *e;
 	int cnt = 0;
 
+	fprintf(stderr, "wcstombs(%08x, %08x, %d)\n", s, pwcs, n);
+	fflush(stderr);
+#if 0
+	if (mbsflag && ((int)pwcs == (int)mbsmbsp)) {
+		fprintf(stderr, "warning: wcstombs: jump to mbstowcs\n");
+		fflush(stderr);
+		wcsflag = 1;
+		wcsmbsp = s;
+		return mbstowcs((wchar_t *)s, (const char *)pwcs, n);
+//		return mbstowcs(pwcs, s, n);
+	} else {
+		wcsflag = 0;
+		wcsmbsp = NULL;
+	}
+#endif
+
 	if (!pwcs || !s)
 		return (-1);
 
 if(pwcs[0]&0xff000000){
+  fprintf(stderr, "warning: wcstombs: force strcpy\n");
+  fflush(stderr);
   strcpy(s, (char *)pwcs);
   return strlen(s);
 }
@@ -154,11 +201,15 @@
 			return (-1);		/* encoding error */
 		if (!e) {			/* too long */
 			*s = 0;
+			fprintf(stderr, "return (%d)\n", cnt);
+			fflush(stderr);
 			return (cnt);
 		}
 		cnt += e - s;
 		n -= e - s;
 		s = e;
 	}
+	fprintf(stderr, "return (%d)\n", cnt);
+	fflush(stderr);
 	return (cnt);
 }
