windowsのvimでrubyのネットワーク機能がちゃんと動かないのはvim側のバグらしいのでパッチ作った
経緯:vim,windows,rubyコマンドでネットワーク関係のコードが失敗する - <s>gnarl,</s>技術メモ”’<marquee><textarea>¥
NtInitializeを呼ぶようにしたらうまくいったやないけ。vimのバグ(windows環境ではrubyの初期化時にNtInitializeを呼ぶ必要がある)と結論。
Index: if_ruby.c =================================================================== --- if_ruby.c (revision 1076) +++ if_ruby.c (working copy) @@ -69,6 +69,9 @@ # define RUBY_DATA_FUNC int #endif +static int dummy_argc=1; +static char *dummy_argv[]={"gvim.exe"}; + static int ruby_initialized = 0; static VALUE objtbl; @@ -186,6 +189,7 @@ static VALUE *dll_ruby_errinfo; static void (*dll_ruby_init) (void); static void (*dll_ruby_init_loadpath) (void); +static void (*dll_NtInitialize) (int*,char**); #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...); #endif @@ -248,6 +252,7 @@ {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo}, {"ruby_init", (RUBY_PROC*)&dll_ruby_init}, {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath}, + {"NtInitialize",(RUBY_PROC*)&dll_NtInitialize}, #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf}, #endif @@ -414,6 +419,9 @@ if (ruby_enabled(TRUE)) { #endif +#ifdef _WIN32 + NtInitialize(&dummy_argc,&dummy_argv); +#endif ruby_init(); ruby_init_loadpath(); ruby_io_init();
これで正常に動くことを確認。したはいいがパッチってどこにどうやって投げればいいんだ←いまここ
- [2008-06-26 21:46] windows以外のことも考慮した修正