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 *