なかだです。

At Fri, 29 Sep 2000 22:42:34 +0900,
Takaaki Tateishi <ttate / jaist.ac.jp> wrote:
> > > まず,iconvのエラーコードとしてE2BIGが返ってきます.このときに
> > > outlenに(-2)が入っています.このため,output length = 258
> > > と返ってきてるようでした.そこで,
> > 
> >   http://www.opengroup.org/onlinepubs/007908799/xsh/iconv.html を見ると
> > オーバーフローのときも 4 つの引数の指す変数はエラーになる直前の値を保証
> > する、という風に読めるんですが、どうでしょう。
> 
> それで,solaris7のmanに添付されているサンプルコードを実装してみ
> て,iconvが呼ばれるたびにoutlenの値をprintf("%d\n",...)で確認し
> てみました.すると,やっぱり負の値をとってました.

  そのときの outptr の値はどうなってるんでしょう。やっぱりバッ
ファをはみ出してますか。[ruby-ext:01317]のようにバッファを余分
に取っていても切れるということであれば、オーバーした分は書き込
まれていないんでしょうけど、逆にオーバーして書き込んでたら結構
ヤバめですが。

> # サンプルコードは一応ちゃんと動いて変換してくれています.

  そのへんちょっと抜き出して見せてもらえとありがたいんですが、
問題あるのかなライセンスとか。

> 気になったのは,solaris7のmanではバッファサイズとして
> /usr/include/iso/stdio_iso.hで定義済みのBUFSIZというマクロを使って
> いる点です.そこで,outputの方のバッファサイズを256からBUFSIZに変更
> してみるとiconv-0.4.3-pre3はうまく動きました.
> 
> # ひょっとしてBUFSIZで決めうちされているのでしょうか....

  どうせ 4096 とか 8192 程度でしょうから、それでも問題は出ない
でしょうけど、ひょっとして単にマルチバイトがバッファ境界に当た
らなくなっただけという可能性はありませんか。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦