From owner-FreeBSD-tech-jp@jp.freebsd.org  Tue Oct 27 13:19:35 1998
Received: by jaz.jp.freebsd.org (8.9.1+3.1W/8.7.3) id NAA14191;
	Tue, 27 Oct 1998 13:19:35 +0900 (JST)
	(envelope-from owner-FreeBSD-tech-jp@jp.FreeBSD.org)
Received: from wall.yamaha-motor.co.jp (firewall-user@wall.yamaha-motor.co.jp [202.32.152.254])
	by jaz.jp.freebsd.org (8.9.1+3.1W/8.7.3) with ESMTP id NAA14173
	for <FreeBSD-tech-jp@jp.freebsd.org>; Tue, 27 Oct 1998 13:19:29 +0900 (JST)
	(envelope-from kimura@kaiseki.yamaha-motor.co.jp)
Received: by wall.yamaha-motor.co.jp; id NAA11642; Tue, 27 Oct 1998 13:19:26 +0900 (JST)
Received: from unknown(133.215.49.21) by wall.yamaha-motor.co.jp via smap (3.2)
	id xma011622; Tue, 27 Oct 98 13:18:59 +0900
Received: from pot026.yamaha-motor.co.jp ([133.215.44.7])
	by proxy.yamaha-motor.co.jp (8.8.8+2.7Wbeta7/3.6W-GW-971226) with ESMTP id NAA12143
	for <FreeBSD-tech-jp@jp.freebsd.org>; Tue, 27 Oct 1998 13:18:49 +0900 (JST)
Received: (from kimura@localhost)
	by pot026.yamaha-motor.co.jp (8.8.8/3.6W) id NAA26905;
	Tue, 27 Oct 1998 13:21:30 +0900 (JST)
Date: Tue, 27 Oct 1998 13:21:30 +0900 (JST)
From: Tetsuya Kimura <kimura@kaiseki.yamaha-motor.co.jp>
Message-Id: <199810270421.NAA26905@pot026.yamaha-motor.co.jp>
To: FreeBSD-tech-jp@jp.freebsd.org
In-reply-to: go@cclub.cc.tut.ac.jp's message of 26 Oct 1998 12:36:37 +0900
References: <199810260330.MAA04359@cclub.cc.tut.ac.jp>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=ISO-2022-JP
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 1833
Subject: [FreeBSD-tech-jp 1833] 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: kimura@kaiseki.yamaha-motor.co.jp

$BLZB<$H?=$7$^$9!#(B

wcstombs, mbstowcs $B$K(B NULL $B$,EO$5$l$?;~$KBP1~$9$k$h$&(B
$BJQ99$7$F$_$^$7$?!#$H$j$"$($:!"(B[FreeBSD-tech-jp 1828]$B$N(B
$B%F%9%H%W%m%0%i%`$G$O$A$c$s$HF0$-$^$9!#(B

$B$"$^$j<+?.$O$"$j$^$;$s$,!"8+$F$d$C$F2<$5$$!#(B

--------------------------------------------------
--- ansi.c.dist	Thu Apr 18 16:01:46 1996
+++ ansi.c	Tue Oct 27 13:01:20 1998
@@ -103,17 +103,23 @@
 	size_t n;
 {
 	char const *e;
+	rune_t c;
 	int cnt = 0;
 
-	if (!pwcs || !s)
+	if (!s)
 		return (-1);
+	if (!pwcs)
+		n = 0;
 
-	while (n-- > 0) {
-		*pwcs = sgetrune(s, MB_LEN_MAX, &e);
-		if (*pwcs == _INVALID_RUNE)
+	while (1) {
+		c = sgetrune(s, MB_LEN_MAX, &e);
+		if (c == _INVALID_RUNE)
 			return (-1);
-		if (*pwcs++ == 0)
-			break;
+		if(n > 0) {
+			*pwcs++ = c;
+			if (cnt >= n) break;
+		}
+		if(c == 0) break;
 		s = e;
 		++cnt;
 	}
@@ -127,23 +133,29 @@
 	size_t n;
 {
 	char *e;
+	char pmbs[MB_LEN_MAX];
 	int cnt = 0;
 
-	if (!pwcs || !s)
+	if (!pwcs)
 		return (-1);
+	if (!s)
+		n = 0;
 
-	while (n > 0) {
+	while (1) {
 		if (*pwcs == 0) {
-			*s = 0;
+			if(n > 0) *s = 0;
 			break;
 		}
-		if (!sputrune(*pwcs++, s, n, &e))
+		if (!sputrune(*pwcs++, pmbs, MB_LEN_MAX, &e))
 			return (-1);		/* encoding error */
 		if (!e)			/* too long */
 			return (cnt);
-		cnt += e - s;
-		n -= e - s;
-		s = e;
+		cnt += e - pmbs;
+		if(n > 0) {
+			strncpy(s, pmbs, MB_LEN_MAX);
+			s += e - pmbs;
+			if(cnt >= n) break;
+		}
 	}
 	return (cnt);
 }
--------------------------------------------------

$B$"$H!"%=!<%9$r8+$F$$$F5?Ld$K;W$C$?$s$G$9$,!"(Bwcstombs $B$b(B
mbstowcs $B$b(B n $B$r1[$($F%j%?!<%s$9$k>l9g$O:G8e$K(B 0 $B$d(B NULL
$B$rDI2C$7$J$$$h$&$K$J$C$F$$$k$s$G$9$,!"$3$l$O$3$l$G$$$$(B
$B$N$G$7$g$&$+!#(B
