libz & libbz2 on MinGW

ファイルタイプを識別するために一度 open() してちょっと読んだものを lseek() で頭に戻して、gzdopen() とか BZ2_bzdopen() とかしていたのだけど、Windows ではなんだかうまく動かなくて、gzread() とかするといきなり EOF になる。なんてこった! gzopen() とか BZ2_bzopen() は問題なく動く。
せっかく open() したファイルハンドルを捨てるのはもったいない、というエコロジー精神は、Windows の世界では通用しないらしいです。しょぼーん、と思ってたら、gzdopen() は open() するときに O_BINARY を足してやればいいみたい。でも、BZ2_bzdopen() は、一度 read() して lseek() したらうまくいかなかった…
さて、プログラム直しますか。

コメントを残す