民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS ようやく BsdTar (Win32) の問題箇所を突き止めた

<<   作成日時 : 2008/08/11 12:37   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

GnuWin32 に含まれる BsdTar で、
bsdtar -xf - < hoge.tar
とやると、例外が発生して「このプログラムは・・・マイクロソフトに送信しますか?」という例のメッセージボックスが表示され、ファイルがうまく展開されないという問題があった。
KageHinata 他、自作のアプリケーションに BsdTar を組み込もうとして、これまでこの件で何度も苦しめられた。

ちょっとした合間を見てはこの問題の解決に取り組んできたのだが、今日、やっとその原因がわかった。
問題は別々に2つ見つかった。

1つは標準入力を使っているにも関わらず、そのファイル名を引数として Win32api の GetFullPathName を呼び出しているところ。問題箇所は libarchive-nonposix.c というファイル内にあるのだが、この結果として、関数が不適切な戻り値を返し、エラーにつながっていた。

そしてもう1つはファイルからのデータ読み込みで、読み込み元が標準入力の場合であっても、標準入力をそのまま C の read 低水準入出力関数に渡しているところ。*NIX とは異なり、Windows では、標準入力はテキストモードになってしまっているので、これは一旦 setmode 関数でバイナリモードに変更してから read 関数に渡してやらなければならない。

以上2点を修正したところ、やっとのことで、思い通りの動作をする bsdtar.exe ができあがった。
ただし今手元にある bsdtar.exe は、自分で使うことを最優先に考えたために、cpio のサポートだとか、bzip2 のサポートだとかは全部取り外してしまったし、gzip 圧縮すらできないバイナリになってしまっている。

元の BsdTar に適用できるパッチを作るかどうか、またそれを公開するかどうかは、今後、なるべく前向きに検討する。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
ようやく BsdTar (Win32) の問題箇所を突き止めた 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる