0x0D 0x0A

Windowsのfread、fwriteは、UNIXで使っていたように何気なく使うとデフォルトでCRLFを勝手にLFに変換してくれるようにできてる。こんなことをされると処理したバイト数はわけわからなくなるし、全くいいことがない。遥か昔、外部データへのパッケージングをやっていた頃に、そんな余計なお世話な隠し仕様がバグの原因であったことがわかり、いったい誰が得をするんだ!アホか!と憤慨したものだった。それはすでに過ぎ去った、今や単なる甘酸っぱい思い出でしかないはずだった。

自動アップデートをさせるためにはサーバーが最新のファイルのバージョンを知っていて、いちいちクライアントの問い合わせに応えてやる必要がある。そこでプロバイダのwebサーバーでcgiを動かしてこのサーバー役をやらせることにした。サーバーはクライアントが持っているファイルのバージョンのリストを受け取るのだが、alpha-netのwebサーバーはOSがWindowsであり、cgiperlで書く必要があり、perlのread関数はfreadを使って作られている。悪夢再び。CRLFで改行されたファイルのデータを取り込むときに、HTTPのヘッダで受け取ったContent-Lengthにあるバイト数と、実際に読み込んだバイト数が違ってしまい、packが上手くいかなくなってハングしていた。アホか!本当にいったいこの仕様は誰が得をするんだろう…?