文字コード

やっとGPUPPURUTでの泥臭いところから少し3Dに近いGPUPPURayの実装をできるかと思ったら、現実はそうはいきませんでした。
DirectX関連のエラー処理をするマクロでエラーをファイルに書き出すようにしてたので、OpenGLのエラーもエラーログに書き出すことにしました。
それで、実はUNICODEを使うようにコンパイルしたとき日本語のファイル名がうまくエラーログに出力されないバグがあり、色々修正することにしました。エラー出力部ではC言語の可変長引数を使う古典的?な方法を使ってたり、wofsteamで正しく出力されなのでfopen使ったりとCとC++が混ざりあうかなり汚く泥臭いソースコードになってしまいました。
OpenGLではエラーが起きたとき、gluErrorString()からエラーに対応する文字列を得られるのですが、これがShift-JISコードの日本語で出力されるため、UNICODEを使っている場合にマルチバイト文字列からワイド文字列へと変換する必要があります。
エラーログへ出力する処理だけに色々調べたり試行錯誤を繰り返し、十数時間も掛かってようやくちゃんとエラーが文字化けせずに出力できました。
Windowsでマルチバイトを使うようにコンパイルしようが、Unicodeを使うようにコンパイルしようが正しく動くように作ったつもりなんですが、これをLinuxに対応させようとするとまた面倒なことになりそうです。
Linuxではみんなutf8を使ってるとみなしていいのだろうか・・・。