mount_smbfs -E の失敗した理由2006年08月14日 14時03分53秒

mount_smbfs -E で失敗していたのは、大まかに分けて2つの原因があったようだ。kiconv の FreeBSD 6 系での動作報告も多数受けているそうである。

一つ目は -E で指定するのには utf-8 ではなく、 UTF-8 でなければいけないらしい。いむらさんによると、UTF-8 などの一部のエンコードでは大文字で記さなければいけない。具体的に言うと、/usr/src/sys/libkern/iconv_ucs.c に以下のように定義されている物に関してだ。


static struct {
        const char *name;
        int from_flag, to_flag;
} unicode_family[] = {
        { "UTF-8",      KICONV_UCS_FROM_UTF8,   KICONV_UCS_TO_UTF8 },
        { "UCS-2LE",    KICONV_UCS_FROM_LE,     KICONV_UCS_TO_LE },
        { "UTF-16BE",   KICONV_UCS_FROM_UTF16,  KICONV_UCS_TO_UTF16 },
        { "UTF-16LE",   KICONV_UCS_FROM_UTF16|KICONV_UCS_FROM_LE,
            KICONV_UCS_TO_UTF16|KICONV_UCS_TO_LE },
        { NULL,         0,      0 }
};

これらのエンコーディングに適合するものを探しているときに、洩れてしまうらしい。何らかの対策を取る予定だそうだ。

もう一つの問題は、インクルードファイルの不整合だったようだ。/usr/src/sys/sys 以下のファイルが使われるべきだったが、/usr/include 以下を参照していた可能性があるとの事だった。

kiconv で変更される物は以下の通りである。いむらさんから教えて頂いたものを抜粋する。

パッチの適用と同期をとって再作成する必要があるのは
以下でしょう。(全パッチを適用した場合)
・libkiconv.so
・mount_*
・kernel (静的に組み込んでいる場合)
・libikonv.ko (動的に組み込んでいる場合)
・libmchain.ko (動的に組み込んでいる場合)
・各ファイルシステムの *.ko (同じく動的に組み込んでいる場合)

前回次回