山本です。

>例えばcp_rとか二つのディレクトリに対して再帰処理をするような場
>合、かなり楽になります。

確かに楽かも。私の場合、

def hoge(src_dir, dst_dir)
    Dir.glob(dst_dir + "/**/*.item") do |dst|
        src = src_dir + dst[dst_dir.length...dst.length]
        # 処理
    end
end

なんてことをしてるんですけど、スマートとはいえませんし・・・


>> * どういう実装をイメージしてますか
>
>glob_helper()からdo_opendir()の部分を切り出すような感じです。

この方法だと、do_stat() なども切り出す必要があると思うので、

  Dir.glob('c:/winnt/..', '*')

のとき、rb_glob2 で上の二つの引数を join して 'c:/winnt/../*' として、* を指すポインタをとって、
glob_helper に引数 const char *sub を追加して上のポインタを渡せば、
glob_call_func で path - sub 個以降の文字を渡すだけで実現できそうな気がします。

今のシンタックスが

  Dir.glob(path, [flags])

なので互換性が心配ですが、glob は Dir インスタンスのディレクトリストリームを必要としないので、
この方がいいと思います。