diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-08-26 22:45:09 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-08-26 22:45:09 +0000 |
commit | 0b04677a1a7e119f52250ff3af26b741bae451e0 (patch) | |
tree | da9da21da57adf570773a13e939e863e85f07e50 | |
parent | 150daae136b0b0e9aa3b687e30988d9e295c42f5 (diff) |
* dir.c (rb_glob_helper): merge from 1.7: traversed files twice
with pattern "*/**". don't descend to non-existing directories.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1712 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | dir.c | 25 |
2 files changed, 17 insertions, 13 deletions
@@ -1,3 +1,8 @@ +Mon Aug 27 07:32:23 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp> + + * dir.c (rb_glob_helper): merge from 1.7: traversed files twice + with pattern "*/**". don't descend to non-existing directories. + Fri Aug 24 15:17:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org> * array.c (rb_ary_equal): check identiry equality first. @@ -605,23 +605,23 @@ rb_glob_helper(path, flags, func, arg) else dir = base; 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); break; } 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 { free(base); @@ -639,7 +639,6 @@ rb_glob_helper(path, flags, func, arg) if (strcmp(".", dp->d_name) == 0 || strcmp("..", dp->d_name) == 0) 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) { continue; |