From owner-FreeBSD-tech-jp@jp.freebsd.org  Tue Oct 27 15:10:10 1998
Received: by jaz.jp.freebsd.org (8.9.1+3.1W/8.7.3) id PAA22816;
	Tue, 27 Oct 1998 15:10:10 +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 PAA22805
	for <FreeBSD-tech-jp@jp.freebsd.org>; Tue, 27 Oct 1998 15:10:06 +0900 (JST)
	(envelope-from kimura@kaiseki.yamaha-motor.co.jp)
Received: by wall.yamaha-motor.co.jp; id PAA20978; Tue, 27 Oct 1998 15:10:03 +0900 (JST)
Received: from unknown(133.215.49.21) by wall.yamaha-motor.co.jp via smap (3.2)
	id xma020966; Tue, 27 Oct 98 15:09:56 +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 PAA18760
	for <FreeBSD-tech-jp@jp.freebsd.org>; Tue, 27 Oct 1998 15:09:46 +0900 (JST)
Received: (from kimura@localhost)
	by pot026.yamaha-motor.co.jp (8.8.8/3.6W) id PAA01441;
	Tue, 27 Oct 1998 15:12:27 +0900 (JST)
Date: Tue, 27 Oct 1998 15:12:27 +0900 (JST)
From: Tetsuya Kimura <kimura@kaiseki.yamaha-motor.co.jp>
Message-Id: <199810270612.PAA01441@pot026.yamaha-motor.co.jp>
To: FreeBSD-tech-jp@jp.freebsd.org
In-reply-to: Murata Shuuichirou's message of 27 Oct 1998 13:41:52 +0900
References: <i2zpai4o1y.fsf@tamtam.astec.co.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 1841
Subject: [FreeBSD-tech-jp 1841] 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: kimura@kaiseki.yamaha-motor.co.jp

$BLZB<$G$9!#(B

$B$`$i$?$5$s(B>
    :> $B$?$V$s!"(Bsputrune() $B$N%^%K%e%"%k$K:\$C$F$$$k!VJ8;z$r$$$l$k$N$K(B
    :> $BI,MW$K(B byte $B?t$r?t$($k$@$1!W$N5!G=$r@h$K<BAu$9$l$P!"$b$&$9$3(B
    :> $B$73Z$K=q$1$=$&$G$9!#(B

$B$J$k$[$I!#$?$7$+$K(B wcstombs $B$N$[$&$O!"$J$s$@$+5g6~$K(B
$B$J$C$F$7$^$$$^$7$?!#(B

    :> n $B$K$T$C$?$j(B -> null $BJ8;z$r$D$1$J$$(B
    :> $B$"$^$C$?(B -> null $BJ8;z$r$D$1$k(B

    :> $B$G$9!#(Bn $B$r1[$($A$c$C$?>l9g$O!"$=$N1[$($A$c$C$?J8;z$O2C$($^$;(B
    :> $B$s$h$M!#$=$&$9$k$H(B null $BJ8;z$r$$$l$k%9%Z!<%9$,$G$-$^$9!#(B

$B$3$l$O!"(B[FreeBSD-tech-jp 1811] $B$N!"$`$i$?$5$s$N%Q%C%A$r(B
$BEv$F$l$P$$$$$s$G$9$h$M!)(B

$B$H$$$&$3$H$G!"$A$g$C$H=$@5$7$F$_$^$7$?!#(B

--------------------------------------------------
--- ansi.c.dist	Thu Apr 18 16:01:46 1996
+++ ansi.c	Tue Oct 27 15:04:47 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,11 +133,21 @@
 	size_t n;
 {
 	char *e;
+	char c[MB_LEN_MAX];
 	int cnt = 0;
 
-	if (!pwcs || !s)
+	if (!pwcs)
 		return (-1);
 
+	if (!s) {
+		while (1) {
+			if (*pwcs == 0) break;
+			cnt += sputrune(*pwcs++, c, MB_LEN_MAX, &e);
+			if (!e) break;
+		}
+		return(cnt);
+	}
+
 	while (n > 0) {
 		if (*pwcs == 0) {
 			*s = 0;
@@ -139,8 +155,10 @@
 		}
 		if (!sputrune(*pwcs++, s, n, &e))
 			return (-1);		/* encoding error */
-		if (!e)			/* too long */
+		if (!e) {			/* too long */
+			*s = 0;
 			return (cnt);
+		}
 		cnt += e - s;
 		n -= e - s;
 		s = e;
