diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-02-13 05:10:46 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-02-13 05:10:46 +0000 |
commit | 2db6b52feb61614cad74ce417d66b8af09ba39db (patch) | |
tree | 8d34430272d3aa8a2c0dd4918766b96da7f86782 /dir.c | |
parent | e393a67aa9fa9a5a6c2ed1f051dc93c1d239012f (diff) |
* parse.y (primary): preserve and clear in_single and in_def using
stack to prevent nested method errors in singleton class bodies.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1178 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 21 |
1 files changed, 16 insertions, 5 deletions
@@ -601,11 +601,22 @@ rb_glob_helper(path, flag, func, arg) rb_glob_helper(buf, flag, func, arg); free(buf); } - dirp = opendir(dir); - if (dirp == NULL) { - free(base); - break; + if (lstat(dir, &st) < 0) { + free(base); + break; } + if (S_ISDIR(st.st_mode)) { + dirp = opendir(dir); + if (dirp == NULL) { + free(base); + break; + } + } + else { + free(base); + break; + } + #define BASE (*base && !(*base == '/' && !base[1])) for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) { @@ -636,7 +647,7 @@ rb_glob_helper(path, flag, func, arg) free(base); free(magic); while (link) { - stat(link->path, &st); /* should success */ + lstat(link->path, &st); /* should success */ if (S_ISDIR(st.st_mode)) { int len = strlen(link->path); int mlen = strlen(m); |