2008-04-04

POSIXとC99のrenameの違い

x264というH.264のエンコーダがあるが、この実装に、不具合ではないかと思う挙動がある。マルチパスのログファイルを出力し終えて、リネームする際に、Cのrename関数を使っている。このとき、リネーム先のファイルが存在した場合、常に上書きするというAssumptionがある。これはおかしいのではないか。

まずは規格を参照されたし。
POSIX renamel
C99 rename

POSIX規格では、renameは上書きするとなっている。
C99(renameの仕様はANSI Cから変わっていないはず)では、"implementation-defined"、となっている。
やれやれ、問題は複雑だ。そもそもx264の開発者には、*unix信奉者がとても多い。現にMSVCのrenameは失敗すると言ったら、「糞MSが標準規格に沿ってないんだ」と返された。そういう連中を相手に、「それはPOSIXだけの独自規格なんだよアホ」、とconvinceしなければならぬのか。

No comments: