なかだです。

 1.6.4で、Dir.glob("*/**/*")がサブディレクトリのファイルを二回
ずつ返しています。1.7.1の方はdir.c:1.31で修正されてるんですが。
とりあえず警告関連は除いてこんなところでしょうか。

 第三chunkは消し忘れ?


Index: dir.c =================================================================== RCS file: /cvs/ruby/src/ruby/dir.c,v retrieving revision 1.24.2.14 diff -u -2 -p -r1.24.2.14 dir.c --- dir.c 2001/07/13 05:50:03 1.24.2.14 +++ dir.c 2001/08/26 10:15:29 @@ -606,11 +606,4 @@ rb_glob_helper(path, flags, func, arg) magic = extract_elem(p); - if (m && strcmp(magic, "**") == 0) { - recursive = 1; - buf = ALLOC_N(char, strlen(base)+strlen(m)+3); - sprintf(buf, "%s%s%s", base, (*base)?"":".", m); - rb_glob_helper(buf, flags, func, arg); - free(buf); - } if (rb_sys_stat(dir, &st) < 0) { free(base); @@ -618,9 +611,16 @@ rb_glob_helper(path, flags, func, arg) } if (S_ISDIR(st.st_mode)) { - dirp = opendir(dir); - if (dirp == NULL) { - free(base); - break; - } + if (m && strcmp(magic, "**") == 0) { + recursive = 1; + buf = ALLOC_N(char, strlen(base)+strlen(m)+3); + sprintf(buf, "%s%s%s", base, (*base)?"":".", m); + rb_glob_helper(buf, flags, func, arg); + free(buf); + } + dirp = opendir(dir); + if (dirp == NULL) { + free(base); + break; + } } else { @@ -640,5 +640,4 @@ rb_glob_helper(path, flags, func, arg) continue; buf = ALLOC_N(char, strlen(base)+NAMLEN(dp)+strlen(m)+6); - sprintf(buf, "%s%s%s/**%s", base, (BASE)?"/":"", dp->d_name, m); sprintf(buf, "%s%s%s", base, (BASE)?"/":"", dp->d_name); if (lstat(buf, &st) < 0) {
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦