summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-05-22 19:22:14 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-05-22 19:22:14 +0000
commit8d1d9260a23dd21e1c621c20895b209fd5ca867a (patch)
treeaef70a5a027001ca3d66592cc3109936222dca9a /dir.c
parenteee2a06bbe2c5b8f4a5edfb06ecd1beabb3d3c67 (diff)
downloadruby-8d1d9260a23dd21e1c621c20895b209fd5ca867a.tar.gz
merge -c 12210
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@12329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/dir.c b/dir.c
index 4c63a0936f..0dd12ffd7d 100644
--- a/dir.c
+++ b/dir.c
@@ -958,13 +958,19 @@ sys_warning_1(mesg)
#define GLOB_ALLOC_N(type, n) (type *)malloc(sizeof(type) * (n))
#define GLOB_JUMP_TAG(status) ((status == -1) ? rb_memerror() : rb_jump_tag(status))
+/*
+ * ENOTDIR can be returned by stat(2) if a non-leaf element of the path
+ * is not a directory.
+ */
+#define to_be_ignored(e) ((e) == ENOENT || (e) == ENOTDIR)
+
/* System call with warning */
static int
do_stat(const char *path, struct stat *pst, int flags)
{
int ret = stat(path, pst);
- if (ret < 0 && errno != ENOENT)
+ if (ret < 0 && !to_be_ignored(errno))
sys_warning(path);
return ret;
@@ -974,7 +980,7 @@ static int
do_lstat(const char *path, struct stat *pst, int flags)
{
int ret = lstat(path, pst);
- if (ret < 0 && errno != ENOENT)
+ if (ret < 0 && !to_be_ignored(errno))
sys_warning(path);
return ret;
@@ -984,7 +990,7 @@ static DIR *
do_opendir(const char *path, int flags)
{
DIR *dirp = opendir(path);
- if (dirp == NULL && errno != ENOENT && errno != ENOTDIR)
+ if (dirp == NULL && !to_be_ignored(errno))
sys_warning(path);
return dirp;