windows版ウェブサーバ作成

投稿日:2019年04月14日 18時10分37秒

linux版のサーバ開発はだいたい落ち着いて、すぐに使わないといけない理由からwindows版サーバを開発している。主に苦労するのは古いborlandc++builderで開発していることと、ファイル名区切りが\マークであること。
意外とc++の機能のうちc99に依存してる部分があって一部機能を削減する必要があった。
例えばva_copyだ。sprintfの領域サイズを気にしない版を利用していたが古いc++ではva_copyがなくて領域サイズの計算ができない。予め領域サイズがわかっていればsprintfは大変便利な関数だ。va_copyを使って書き込み領域シミュレーションを行いサイズ0でsnprintfを行うと書き込みサイズがわかる。

//wString 可変引数
int wString::sprintf(const char* format, ... )
{
    int stat;
    //可変引数を2つ作る
    va_list ap1,ap2;
    va_start(ap1, format);
    va_copy (ap2, ap1);
    //最初はダミーで文字列長をシミュレート
    stat = vsnprintf(String, 0, format, ap1);
    SetLength( stat );
    //実際に出力
    stat = vsprintf(String, format, ap2);
    va_end(ap1);
    va_end(ap2);
    len = stat;
    return stat;
}

これがないと基本的にうまく動かない。かなり内部に手を入れざるを得なかった。
またファイルの区切り文字が\であることも面倒だ。request_uriは\で区切られているのだが、ファイル自体は\で区切られている。linuxだと同じなので多少並び替えするだけでいいのだが、windowsでは分離して考えなくてはならないので極めて面倒だ。javascriptの文字列として登録する場合も\は\\に変換しないと登録できない。
これらが混在した中でwebアプリを作るとちょっと頭が爆発する。

なんとか今は収束させつつあるが、環境の違いはこれほどまでに影響あるものなのだなと実感。

[<< dupを考える]

[atwikiのパスワード流出について >>]