山本です。

>|たしかにfnmatch()とは無関係なので、名前を変えて外部からは指定で
>|きないようにしました。
>
>確認ですが、このパッチを入れるとwin32で問題なくinit前にglob
>が使えるようになるんですか。それだったらコミットしてください。

すみません、まだ落ちます。私が気になってたのは、

  1. ALLOC_N や malloc なんかも GC を発生させる可能性があるので、
     もう、どんな関数も ruby_init 前に呼び出すのは危険な気がする。

  2. では、rb_protect などが ruby_running を見て対処すべきか?そうすれば
     rb_glob を呼ぶ側は変更を意識せずにすむし。しかしそれも adhoc な感じがするし・・・・

  3. となると やはり ruby_running を外部から参照できるようにする方法だろうか。
     ruby/tk もインタプリタが終了してるのにデバッグ情報を書き出そうとして
     落ちてたけど、#define DEBUG(hoge) if (ruby_verbose && ruby_running) ....
     というようにすれば落ちなくなるのでは。しかし fnmatch のように
     glob も純粋な C のみで実装するというのも、理にかなった話ではあるし・・・

という辺りで悶々としてました。極端な話なのですが、

Index: dir.c
===================================================================
RCS file: /src/ruby/dir.c,v
retrieving revision 1.144
diff -u -w -b -p -r1.144 dir.c
--- dir.c	12 Sep 2005 10:44:19 -0000	1.144
+++ dir.c	14 Sep 2005 05:24:18 -0000
@@ -1346,6 +1346,8 @@ rb_glob(const char *path, void (*func) (
     struct rb_glob_args args;
     int status;
 
+    ruby_init();
+
     args.func = func;
     args.arg = arg;
     status = rb_glob2(path, 0, rb_glob_caller, (VALUE)&args);

ではいけないのでしょうか?ruby_init は複数回呼んだら無視するように
なっているので、とりあえず動いているようなのですが。