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

アクセスカウンタ

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

<<   作成日時 : 2008/08/11 22:41   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 2 / トラックバック 0 / コメント 0

前回の記事で、BsdTar の問題を突き止め、その概要をメモ形式で公開した。改めてパッチを作ろうとしたのだが、そもそもオリジナルの bsdtar.exe のコンパイルも、あれやこれやと手探り状態であるのに、そのためのパッチなど作りようがない。bsdtar.exeのコンセプトやポリシーをしっかりと理解できているわけでもない。
そこで、私の施した修正箇所だけを具体的にここに公開しておくにとどめることにする。
使用した元のソースは、libarchive 2.4.12 のものだ。

まず、libarchive-nonposix.c の13行目あたりから始まる fullname という関数を

char *fullname (const char *name)
{
    char *rpath = NULL;
    char *lpFilePart;
    int len, res;
    if (!*name) {
        rpath = malloc(sizeof(char));
        if (rpath) *rpath = '\0';
        return rpath;
    }

    len = GetFullPathName(name, 0, rpath, &lpFilePart);
    if (len == 0) {
        errno = EINVAL;
        return NULL;
    }

このように書き換え、引数が空文字列であった場合、空文字列を返すようにし、NULLや不定値が返らないようにする。

続いて、archive_read_open_filename.c の104行目あたりから始まる関数 file_open の半ば、115行目あたりで、C の open 関数を呼んでいるあたりを

    if (mine->filename[0] != '\0')
        mine->fd = open(mine->filename, O_RDONLY | O_BINARY);
    else {
        mine->fd = 0; /* Fake "open" for stdin. */
        setmode(fileno(stdin), O_BINARY);
    }

このように書き換え、stdin をバイナリモードにセットするようにする。

さらに念のため、archive_write_open_filename.c の90行目あたりから始まる関数 file_open の半ば、100行目あたりでやはり、C の open 関数を呼んでいるあたりを

        /*
         * NULL filename is stdout.
         */
        mine->fd = 1;
        setmode(fileno(stdout), O_BINARY);
        /* By default, pad archive when writing to stdout. */

と書き換え、stdout もバイナリモードで利用するようにする。

以上で、Windows 上でも、bsdtar.exe は正常に動作するようになるはずなのだが。
未だに、./configure; make; make install と単純な操作一発でコンパイルできるようにならないのが、頭痛の種だ。

誰かもっと GnuWin32 や BsdTar に詳しい人がこの記事を見つけて、適切なパッチを作ってくれることをただ祈るばかりだ。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 2
なるほど(納得、参考になった、ヘー)
ナイス

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

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