summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-05-24 04:34:26 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-05-24 04:34:26 +0000
commit8b1de0b1ad49733abeddd8be359ae816b29de59a (patch)
treea7ed03dd3f6442635f694c4367bcd94be57f6dbd /dir.c
parent24b9bdca25dc431aff935df7739b9c5ea0ee4077 (diff)
2000-05-24
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/dir.c b/dir.c
index 5b95fcde4a..cfc990406c 100644
--- a/dir.c
+++ b/dir.c
@@ -241,10 +241,6 @@ dir_s_new(argc, argv, klass)
rb_obj_call_init(obj, argc, argv);
- if (rb_iterator_p()) {
- rb_ensure(rb_yield, obj, dir_close, obj);
- }
-
return obj;
}
@@ -268,6 +264,7 @@ dir_initialize(dir, dirname)
}
}
DATA_PTR(dir) = dirp;
+
return dir;
}
@@ -275,7 +272,13 @@ static VALUE
dir_s_open(klass, dirname)
VALUE klass, dirname;
{
- return dir_s_new(1, &dirname, klass);
+ VALUE dir = dir_s_new(1, &dirname, klass);
+ if (rb_block_given_p()) {
+ rb_ensure(rb_yield, dir, dir_close, dir);
+ return Qnil;
+ }
+
+ return dir;
}
static void
@@ -760,7 +763,7 @@ dir_s_glob(dir, str)
}
if (buf != buffer)
free(buf);
- if (rb_iterator_p()) {
+ if (rb_block_given_p()) {
long len = RARRAY(ary)->len;
VALUE *ptr = RARRAY(ary)->ptr;