From owner-FreeBSD-tech-jp@jp.freebsd.org  Tue Oct 27 15:43:19 1998
Received: by jaz.jp.freebsd.org (8.9.1+3.1W/8.7.3) id PAA26156;
	Tue, 27 Oct 1998 15:43:19 +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 PAA26150
	for <FreeBSD-tech-jp@jp.freebsd.org>; Tue, 27 Oct 1998 15:43:15 +0900 (JST)
	(envelope-from kimura@kaiseki.yamaha-motor.co.jp)
Received: by wall.yamaha-motor.co.jp; id PAA23790; Tue, 27 Oct 1998 15:43:14 +0900 (JST)
Received: from unknown(133.215.49.21) by wall.yamaha-motor.co.jp via smap (3.2)
	id xma023677; Tue, 27 Oct 98 15:42:42 +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 PAA20463
	for <FreeBSD-tech-jp@jp.freebsd.org>; Tue, 27 Oct 1998 15:42:40 +0900 (JST)
Received: (from kimura@localhost)
	by pot026.yamaha-motor.co.jp (8.8.8/3.6W) id PAA02599;
	Tue, 27 Oct 1998 15:45:21 +0900 (JST)
Date: Tue, 27 Oct 1998 15:45:21 +0900 (JST)
From: Tetsuya Kimura <kimura@kaiseki.yamaha-motor.co.jp>
Message-Id: <199810270645.PAA02599@pot026.yamaha-motor.co.jp>
To: FreeBSD-tech-jp@jp.freebsd.org
In-reply-to: Tetsuya Kimura's message of 27 Oct 1998 15:15:30 +0900
References: <199810270612.PAA01441@pot026.yamaha-motor.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 1843
Subject: [FreeBSD-tech-jp 1843] 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$9$_$^$;$s!#$^$?=$@5$G$9!#A0$N$d$D$@$H(B mbstowcs $B$r8F$V$H$-$K(B
wcstring != NULL, n == 0 $B$N$H$-$b!"(B wcsstring == NULL $B$N$H$-(B
$B$HF1$8F0:n$r$7$F$7$^$&$N$G!"$^$:$$$s$8$c$J$$$+$H;W$$$^$9!#(B
$B>/$J$/$H$b(B IRIX 6.2 $B$G$O(B n == 0 $B$N;~$K$O(B 0 $B$,JV$C$F$-$F$^$7$?!#(B

$B7k6I(B NULL $B$,EO$C$F$/$k>l9g$H!"$=$&$G$J$$>l9g$rJL!9$K07$&$h$&(B
$B$K=$@5$7$^$7$?!#(B

--------------------------------------------------
--- ansi.c.dist	Thu Apr 18 16:01:46 1996
+++ ansi.c	Tue Oct 27 15:32:37 1998
@@ -103,11 +103,25 @@
 	size_t n;
 {
 	char const *e;
+	rune_t c;
 	int cnt = 0;
 
-	if (!pwcs || !s)
+	if (!s)
 		return (-1);
 
+	if (!pwcs) {
+		while (1) {
+			c = sgetrune(s, MB_LEN_MAX, &e);
+			if ( c == _INVALID_RUNE)
+				return(-1);
+			if (c == 0) break;
+			s = e;
+			++cnt;
+		}
+		return(cnt);
+	}
+
+
 	while (n-- > 0) {
 		*pwcs = sgetrune(s, MB_LEN_MAX, &e);
 		if (*pwcs == _INVALID_RUNE)
@@ -127,11 +141,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 +163,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;

