summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-08-26 22:45:09 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-08-26 22:45:09 +0000
commit0b04677a1a7e119f52250ff3af26b741bae451e0 (patch)
treeda9da21da57adf570773a13e939e863e85f07e50 /dir.c
parent150daae136b0b0e9aa3b687e30988d9e295c42f5 (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.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/dir.c b/dir.c
index 42d9e8eb03..bc453ca41b 100644
--- a/dir.c
+++ b/dir.c
@@ -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;