At Mon, 18 Mar 2002 15:51:08 +0900,
nobu.nakada wrote:
> FreeBSDのiconv 2.0で、'iso-8859-1'から'iso-8859-1'へのiconv()で1024バ
> イトまでしか変換されないという報告があるんですが、これはFreeBSDのほう
> ではなにか報告されてないでしょうか。

 調査していただいてありがとうございます。メンテナが忙しいらしく、
いくつか見つかっているバグが放置されている状態です。ご指摘の件に
ついては報告しておきました。

 そんな有様なので、 FreeBSD ports では近々 GNU libiconv を標準と
して使うように修正することになっています。どっちの実装もバグが
あるなら、よりメジャーでメンテナンスされている方がましと。

 LGPL なのがいまいちですが、 BSDL な iconv は gettext とともに
いずれ CITRUS が実装するのかな、とか。できれば、せっかくすでに
ある上記実装をちゃんと直したいんですが。

 添付のような平凡な修正でいいでしょうか?

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Somewhere out of a memory.. of lighted streets on quiet nights.."

--- lib/converter.c.orig	Sun Nov 26 22:10:22 2000
+++ lib/converter.c	Mon Mar 18 17:55:50 2002
@@ -92,14 +92,14 @@
 		if (ch == UCS_CHAR_NONE) {
 			/* Incomplete character in input buffer */
 			errno = EINVAL;
-			return res;
+			return (size_t)(-1);
 		}
 		if (ch == UCS_CHAR_INVALID) {
 			/* Invalid character in source buffer */
 			*inbytesleft += *inbuf - ptr;
 			*inbuf = ptr;
 			errno = EILSEQ;
-			return res;
+			return (size_t)(-1);
 		}
 		size = ICONV_CES_CONVERT_FROM_UCS(&(uc->to), ch,
 		                                  outbuf, outbytesleft);
@@ -116,7 +116,7 @@
 			*inbytesleft += *inbuf - ptr;
 			*inbuf = ptr; 
 			errno = E2BIG;
-			return res;
+			return (size_t)(-1);
 		}
 	}
 	return res;
@@ -163,8 +163,10 @@
 		*inbytesleft -= len;
 		*outbuf += len;
 		*outbytesleft -= len;
+		return 0;
 	}
-	return 0;
+
+	return (size_t)(-1);
 }
 
 iconv_converter *