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 /dir.c | |
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
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 25 |
1 files changed, 12 insertions, 13 deletions
@@ -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; |