From owner-FreeBSD-users-jp@jp.FreeBSD.org Mon Nov 24 15:55:15 2003
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id hAO6tFp21248;
	Mon, 24 Nov 2003 15:55:15 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from mail.ryu16.org (ryu16-org.tsps1.freenet6.net [3ffe:b80:2:6d06::2])
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) with ESMTP/inet6 id hAO6tDM21242
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Mon, 24 Nov 2003 15:55:13 +0900 (JST)
	(envelope-from imura@ryu16.org)
Received: from redeye.xt.ryu16.org (localhost [127.0.0.1])
	by mail.ryu16.org (8.12.9p1/8.12.9) with ESMTP id hAO6t9mh019764
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Mon, 24 Nov 2003 15:55:09 +0900 (JST)
	(envelope-from imura@redeye.xt.ryu16.org)
Received: (from imura@localhost)
	by redeye.xt.ryu16.org (8.12.9p1/8.12.9/Submit) id hAO6t9rd019763
	for FreeBSD-users-jp@jp.FreeBSD.org; Mon, 24 Nov 2003 15:55:09 +0900 (JST)
	(envelope-from imura)
From: "R. Imura" <imura@ryu16.org>
To: FreeBSD-users-jp@jp.FreeBSD.org
Message-ID: <20031124065509.GA19234%imura@ryu16.org>
References: <20031124.032633.74758270.hsato@ba2.so-net.ne.jp>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Disposition: inline
In-Reply-To: <20031124.032633.74758270.hsato@ba2.so-net.ne.jp>
User-Agent: Mutt/1.4.1i-ja.1
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
Date: Mon, 24 Nov 2003 15:55:09 +0900
X-Sequence: FreeBSD-users-jp 77316
Subject: [FreeBSD-users-jp 77316] Re: FreeBSD 5.2 BETA
 =?ISO-2022-JP?B?GyRCJE4bKEI=?= msdosfs
 =?ISO-2022-JP?B?GyRCJEskRCQkJEYbKEI=?=
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: imura@ryu16.org
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+031103

On Mon, Nov 24, 2003 at 03:26:33AM +0900, Hiroaki Satoh wrote:
> $B$H$3$m$G;d$ND>LL$7$F$$$kLdBj$O(B, 
> msdosfs$B$N;EMM$,JQ$o$C$?$_$?$$$GF0:n$,$+$o$C$F$7$^$C$?$3$H$G$9(B.

> $B8=:_$N(B5.2BETA$B$G$O87L)$KBgJ8;z>.J8;z$r6hJL$7$F(B
> 
>    /dosfs/Src/font/DynaFont/CJK/DFHsg3.ttc
> 
> $B$N$h$&$K%"%/%;%9$7$J$$$H$$$1$J$/$J$j$^$7$?(B. ($B;EMM$NJQ99$H$$$&$h$j(B, 
> $B$h$j87L)$K$J$C$?$H$$$&$3$H$J$N$+$bCN$l$^$;$s$,(B,)

> $B$3$NJU$j$N7P0^$r$4B8CN$N$+$?(B, $B$h$m$7$1$l$P65$($F$$$?$@$1$^$;$s$+(B?

$B;d$,%^%k%A%P%$%H%P%C%A$r:n@.$7$?:]$K!"$=$&$$$&MQES$,;W$$$D$+$J$+$C$?$N$G!"(B
$BBgJ8;z>.J8;z$N6hJL$r$9$k$h$&$K$J$j$^$7$?!#(B(^^;
$B$=$N$^$^C/$+$i$b;XE&$,$J$$$N$G!"$=$&$$$&F0:n$KJQ$o$C$F$7$^$C$F$$$^$9!#(B
$B#32U=j$K0J2<$N%Q%C%A$rEv$F$l$P0JA0$NF0:n$KLa$j$^$9!#(B
(libiconv.ko $B$K%P%0$,$"$C$?$N$G!"M>7W$J%Q%C%A$,A}$($F$7$^$C$?(B)
$B%Q%C%A$rEv$F$?8e!"(Blibiconv.ko, msdosfs.ko, mount_msdosfs $B$r:n$jD>$7$F!"(B
$BLdBj$,$J$/;H$($k$+!"65$($F$/$@$5$$!#(B

- $B$$$`$i(B

Index: sbin/mount_msdosfs/mount_msdosfs.c
===================================================================
RCS file: /home/ncvs/src/sbin/mount_msdosfs/mount_msdosfs.c,v
retrieving revision 1.31
diff -u -r1.31 mount_msdosfs.c
--- sbin/mount_msdosfs/mount_msdosfs.c	23 Oct 2003 16:09:20 -0000	1.31
+++ sbin/mount_msdosfs/mount_msdosfs.c	24 Nov 2003 06:34:07 -0000
@@ -339,7 +339,7 @@
 	if ((args->cs_win = malloc(ICONV_CSNMAXLEN)) == NULL)
 		return (-1);
 	strncpy(args->cs_win, ENCODING_UNICODE, ICONV_CSNMAXLEN);
-	error = kiconv_add_xlat16_cspair(args->cs_win, args->cs_local, 0);
+	error = kiconv_add_xlat16_cspair(args->cs_win, args->cs_local, KICONV_FROM_LOWER);
 	if (error)
 		return (-1);
 	error = kiconv_add_xlat16_cspair(args->cs_local, args->cs_win, 0);
Index: sys/fs/msdosfs/msdosfs_conv.c
===================================================================
RCS file: /home/ncvs/src/sys/fs/msdosfs/msdosfs_conv.c,v
retrieving revision 1.34
diff -u -r1.34 msdosfs_conv.c
--- sys/fs/msdosfs/msdosfs_conv.c	26 Sep 2003 20:26:22 -0000	1.34
+++ sys/fs/msdosfs/msdosfs_conv.c	24 Nov 2003 06:38:51 -0000
@@ -800,10 +800,10 @@
 
 	for (np = dirbuf.d_name; unlen > 0 && len > 0;) {
 		/*
-		 * Should comparison be case insensitive?
+		 * Comparison should be case insensitive.
 		 */
-		c1 = unix2winchr((const u_char **)&np, (size_t *)&len, 0, pmp);
-		c2 = unix2winchr(&un, (size_t *)&unlen, 0, pmp);
+		c1 = unix2winchr((const u_char **)&np, (size_t *)&len, LCASE_BASE, pmp);
+		c2 = unix2winchr(&un, (size_t *)&unlen, LCASE_BASE, pmp);
 		if (c1 != c2)
 			return -2;
 	}
Index: sys/libkern/iconv_xlat16.c
===================================================================
RCS file: /home/ncvs/src/sys/libkern/iconv_xlat16.c,v
retrieving revision 1.1
diff -u -r1.1 iconv_xlat16.c
--- sys/libkern/iconv_xlat16.c	26 Sep 2003 20:26:24 -0000	1.1
+++ sys/libkern/iconv_xlat16.c	24 Nov 2003 06:52:40 -0000
@@ -96,7 +96,7 @@
 	struct iconv_xlat16 *dp = (struct iconv_xlat16*)d2p;
 	const char *src;
 	char *dst;
-	int ret = 0;
+	int ret = 0, nullin;
 	size_t in, on, ir, or, inlen;
 	uint32_t code;
 	u_char u, l;
@@ -146,7 +146,8 @@
 			}
 		}
 
-		if ((inlen == 1) && (code & XLAT16_ACCEPT_NULL_IN)) {
+		nullin = (code & XLAT16_ACCEPT_NULL_IN) ? 1 : 0;
+		if ((inlen == 1) && nullin) {
 			/*
 			 * XLAT16_ACCEPT_NULL_IN requires inbuf has 2byte
 			 */
@@ -157,6 +158,10 @@
 		/*
 		 * now start translation
 		 */
+		if ((casetype == KICONV_FROM_LOWER && code & XLAT16_HAS_FROM_LOWER_CASE) ||
+		    (casetype == KICONV_FROM_UPPER && code & XLAT16_HAS_FROM_UPPER_CASE))
+			code = dp->d_table[0][(u_char)(code >> 16)];
+
 		u = (u_char)(code >> 8);
 		l = (u_char)code;
 
@@ -184,9 +189,6 @@
 			if ((casetype == KICONV_LOWER && code & XLAT16_HAS_LOWER_CASE) ||
 			    (casetype == KICONV_UPPER && code & XLAT16_HAS_UPPER_CASE))
 				*dst++ = (u_char)(code >> 16);
-			else if ((casetype == KICONV_FROM_LOWER && code & XLAT16_HAS_FROM_LOWER_CASE) ||
-				 (casetype == KICONV_FROM_UPPER && code & XLAT16_HAS_FROM_UPPER_CASE))
-				*dst++ = dp->d_table[0][(u_char)(code >> 16)];
 			else
 				*dst++ = l;
 			or--;
@@ -197,8 +199,7 @@
 			 * there is a case that inbuf char is a single
 			 * byte char while inlen == 2
 			 */
-			if ((u_char)*(src+1) == 0 &&
-			    (code & XLAT16_ACCEPT_NULL_IN) == 0 ) {
+			if ((u_char)*(src+1) == 0 && !nullin ) {
 				src++;
 				ir--;
 			} else {
