まつもと ゆきひろです

In message "Re: [ruby-dev:24488] Re: Dir.glob dumps core"
    on Wed, 13 Oct 2004 12:09:05 +0900, nobu / ruby-lang.org writes:

|なかだです。
|
|At Tue, 12 Oct 2004 23:59:47 +0900,
|Tanaka Akira wrote in [ruby-dev:24487]:
|> 次のようにすると core を吐きます。
|> 
|> % mkdir -p /tmp/tst/{a,b,c}/{d,e,f}
|> % ./ruby -e '                      
|> Dir.glob("/tmp/tst/**/*") {|f| callcc {|k| $k = k } if f == "/tmp/tst/a/f" }
|> $k.call'
|
|バッファの類をStringにしてみたらどうかとも思ったんですが、
|opendir/closedirの間でyieldしてるんですよねぇ。
|
|もっと簡単な方法はないかな。

ちゅーか、ALLOC_Nとfreeを明示的に使う現在の実装はcallccとの
相性は最悪ですねえ。

ブロックがある時もない時も配列を作っておいて、yieldの呼び出
しを最後にまとめてやるのが一番簡単だと思います。ディレクトリ
エントリが多いとちょっと効率悪いですが。

でも、その効率を追求したくてブロックを使うのかもしれないから、
そういう対応はまずいのかな(やっちゃったけど)。