その後、デフォルトページがCGIの場合に上手く動かないバグを修正しました。
お礼とは言っては何ですが(Windowsなんかイラネかもしれませんが)、smegheadさんが作っておられるC言語で書かれたBTS「starbug1」をWindowsにポーティングしてみました。
以下patch
diff -u starbug1-1.3.01.orig/hook.c starbug1-1.3.01/hook.c
--- starbug1-1.3.01.orig/hook.c 2009-07-12 20:37:55.000000000 +0900
+++ starbug1-1.3.01/hook.c 2009-08-04 10:11:19.125000000 +0900
@@ -4,7 +4,11 @@
#include <cgic.h>
#include <dirent.h>
#include <sys/stat.h>
+#ifndef _WIN32
#include <dlfcn.h>
+#else
+#include <windows.h>
+#endif
#include "data.h"
#include "alloc.h"
#include "util.h"
@@ -12,6 +16,24 @@
#include "hook_data.h"
#include "simple_string.h"
+#ifdef _WIN32
+#define dlopen(x,y) (void*)LoadLibrary(x)
+#define dlsym(x,y) (void*)GetProcAddress((HMODULE)x,y)
+#define dlclose(x) FreeLibrary((HMODULE)x)
+const char* dlerror() {
+ static char szMsgBuf[256];
+ FormatMessage(
+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ GetLastError(),
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ szMsgBuf,
+ sizeof szMsgBuf,
+ NULL);
+ return szMsgBuf;
+}
+#endif
+
static void put_env_a(char* name, char* value, char* buf)
{
sprintf(buf, "%s=%s", name, value);
diff -u starbug1-1.3.01.orig/util.c starbug1-1.3.01/util.c
--- starbug1-1.3.01.orig/util.c 2009-07-25 22:38:03.000000000 +0900
+++ starbug1-1.3.01/util.c 2009-08-04 11:39:35.078125000 +0900
@@ -698,9 +698,21 @@
char locale_utf8[DEFAULT_LENGTH];
sprintf(locale_utf8, "%s.UTF-8", locale);
d("locale: %s\n", locale_utf8);
+#ifndef _WIN32
setenv("LANG", locale_utf8, 1); /* FreeBSD(さくらインターネット)でsetlocaleが動作しない場合があったため、環境変数を書き換える。 */
+#else
+ {
+ char envstr[256];
+ strcpy(envstr, "LANG=");
+ strcat(envstr, locale_utf8);
+ putenv(envstr);
+ }
+#endif
d("setlocale: %s\n", setlocale(LC_ALL, locale_utf8));
d("bindtextdomain: %s\n", bindtextdomain("starbug1", "locale"));
d("textdomain: %s\n", textdomain("starbug1"));
+#ifdef _WIN32
+ bind_textdomain_codeset("starbug1", "utf-8");
+#endif
}
/* vim: set ts=4 sw=4 sts=4 expandtab fenc=utf-8: */
ビルドに必要なツール類はgnuwin32なんかで取得して下さい。見事起動出来ました。
ありがとうございました。