paxでShift-JISのまま格納される件
Cygwinのtarで
tar --format=pax -cf out.tar こんにちは.txt
とすると、ファイル名がpaxヘッダにShift-JISのまま格納されてしまいます。
ところが、
tar --format=pax -cf out.tar あ.txt
だと、ちゃんとUTF-8に変換されます。
コード(utf8.c)を見ると、UTF-8に変換する処理が入っているんですが、
inlen = strlen (input) + 1; outlen = inlen * MB_LEN_MAX + 1; ob = *output = xmalloc (outlen); ib = (char ICONV_CONST *) input; rc = iconv (cd, &ib, &inlen, &ob, &outlen); *ob = 0;
CygwinのMB_LEN_MAXが1なので、ほとんどの場合バッファが足りないのが原因です。
「あ.txt」だと、inlen=7、outlen=8になって辛うじてバッファが足りるので変換できていたようです。
ただし、「*ob = 0」で9バイト目にアクセスしてますが、、、。