山本です。なかださんのコードで気になった点が3つあります。
(_WIN32のコードだとコンパイルで無限ループしたので、_WIN32の部分は削除してコンパイルしました。)

// 1

E:\ruby-dev\ruby-1.8.1>miniruby -Ks -e "puts Dir.glob('s:/script/**/*/')"
s:/script/sample/
s:/script/sample/aya/
s:/script/sample/aya/cscript/
s:/script/sample/aya/error/
s:/script/sample/aya/vs Perl/
s:/script/sample/tcp/
s:/script/test/
s:/script/test/class/
s:/script/test/file/
s:/script/project/
s:/script/project/java/
s:/script/project/wwwc/
s:/script/project/bcb/

は上からマッチするのですが、

E:\ruby-dev\ruby-1.8.1>miniruby -Ks -e "puts Dir.glob('s:/script/**/*/*/')"
s:/script/sample/aya/cscript/
s:/script/sample/aya/error/
s:/script/sample/aya/vs Perl/
s:/script/sample/aya/
s:/script/sample/tcp/
s:/script/test/class/
s:/script/test/file/
s:/script/project/java/
s:/script/project/wwwc/
s:/script/project/bcb/

は、上からマッチしません。これは意図された動作でしょうか?

// 2

ALLOC_BUF()ですが、malloc と free は狭いスコープで完結していたほうが保守しやすいと思います。
(途中で return や break が入ることを考えると、特に)
速度が大きく違うならと思って計測しましたが、速度に違いはありませんでした。

// 3

status = glob_helper が非0を返す場合に中断していないようです。
こっちが正しい動作なのかもしれませんが・・・