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:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.