iconv の下調べ ― 2006年07月21日 10時28分11秒
FreeBSD 6.1 では which iconv で /usr/local/bin/iconv が出てくる。iconv は ports から入ってきたらしい。実は、現在の kiconv の実装は掴みきれていない。
tech-jp に 2003 年 7 月に投げられたメールによると、kiconv はユーザスペースから変換表は取ってくるとある。引用する。
iconv のしくみについて、簡単に説明しておきます。 カーネル内に保持しているのは、変換エンジンのみで、 変換エンジンが使用する文字コード変換表は、sysctl によって ユーザランドからカーネルの世界に copyin(9) するイメージとなります。 個々の変換エンジンは(現状は xlat のみ)、KOBJ に乗っかっており、 追加や入れ替えが簡単にできるようになっています。 今回の 16bit 拡張は、単純に xlat16 というコンバータを 追加しただけという形です。copyin と言うシステムコールがあったらしい。
そこからのリンクの既存の日本語文字コードと Unicode の間のマッピングルールもよくまとまっている。
copyin をソースの中を探してみたところ、ここにあった。
% cd /usr/src/sys/netsmb
% grep copyin *
smb_smb.c: * Errors can happen on the copyin, the rpc, etc. So they
smb_subr.c: if (copyin(p, &bt, 1))
smb_subr.c: error = copyin(s, p, len);
smb_subr.c: if (copyin(umem, p, len) == 0)
ここらあたりから見ていけばいいかな。
最近のコメント