I know I believe in nothing but it is my sweet nothing.:2008年07月14日分

2008/07/14(Mon)

[OpenBSD] mutt-dev

--without-wc-funcs無しであれば素のOpenBSDを使う以上
動いてたのは運が良かったのかもちゅうことで。

iconv(cd, NULL, 0, ...)はstateless encodingの場合、あるいはstateful encodingでも
すでに'\0'まで変換が行われてた場合は何もoutbufには書き込みません。
それ以外の場合はシフト状態を初期化するためのエスケープを'\0'は含まず出力します。
あぁややこしい。

本当はmutt_iconv()の設計がいまいちで、mutt_convert_string()側ではoutbufをmalloc(2)せず
mutt_iconv()側でE2BIG返ってきたらreallocしながら変換を実行すべきなんでしょうけど。
それとmutt_iconv()自体を

  1. nul-terminateまでをone-shotで変換する関数。
  2. ↑を複数行まとめて実行する関数

にリファクタリングすべきなんでしょうね。
# そもそも1はiconvの機能として標準として用意しとけとも思う。

多分一番説明がめんどくさいのが、MB_LEN_MAX=1なんだからinput encodingのeucJP(MB_CUR_MAX=3)
が扱えなくて当然、よって問題なしとか判断されちゃうかもってとこですかね。
どっちみちiconv()ではM:N変換を扱わなければならないので、対策が必要であることを理解してもらえるかどうか。

しかしOpenBSDはlibcのnamespace.h + __weak_alias()の扱いについて
これ誰も気にしてないところが少し不思議、まぁFreeBSDも以下同文。

今日

蝉が地中より這い出て変態しながら奇声を上げる毎日も近いな、暑過ぎる。

sysinst(8)が死ぬのは src/distrib/utils/libhack/multibyte.cのせいで、dsl氏がすでに直してくれてた模様。