diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-04-10 10:09:49 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-04-10 10:09:49 +0000 |
commit | 4af06a86de87b9f12751fb155d10c1f9e453097a (patch) | |
tree | e3c9324afa79d453f6dc8c32c9d3c6922cde8c39 /dir.c | |
parent | 882c18e65ef38342cd2dc0d4cd5e643439c30a77 (diff) |
1.1b9_10 pre0
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@164 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 30 |
1 files changed, 28 insertions, 2 deletions
@@ -59,6 +59,8 @@ free_dir(dir) if (dir) closedir(dir); } +static VALUE dir_close _((VALUE)); + static VALUE dir_s_open(dir_class, dirname) VALUE dir_class, dirname; @@ -81,6 +83,9 @@ dir_s_open(dir_class, dirname) obj = Data_Wrap_Struct(dir_class, 0, free_dir, dirp); + if (iterator_p()) + rb_ensure(rb_yield, obj, dir_close, obj); + return obj; } @@ -95,6 +100,23 @@ dir_closed() if (dirp == NULL) dir_closed();\ } +#if 0 +static VALUE +dir_read(dir) + VALUE dir; +{ + DIR *dirp; + struct dirent *dp; + + GetDIR(dir, dirp); + dp = readdir(dirp); + if (dp) + return str_taint(str_new(dp->d_name, NAMLEN(dp))); + else + return Qnil; +} +#endif + static VALUE dir_each(dir) VALUE dir; @@ -190,7 +212,7 @@ dir_s_chdir(argc, argv, obj) } if (chdir(dist) < 0) - rb_sys_fail(0); + rb_sys_fail(dist); return INT2FIX(0); } @@ -220,7 +242,7 @@ dir_s_chroot(dir, path) Check_SafeStr(path); if (chroot(RSTRING(path)->ptr) == -1) - rb_sys_fail(0); + rb_sys_fail(RSTRING(path)->ptr); return INT2FIX(0); #else @@ -402,9 +424,13 @@ Init_Dir() rb_include_module(cDir, mEnumerable); + rb_define_singleton_method(cDir, "new", dir_s_open, 1); rb_define_singleton_method(cDir, "open", dir_s_open, 1); rb_define_singleton_method(cDir, "foreach", dir_foreach, 1); +#if 0 + rb_define_method(cDir,"read", dir_read, 0); +#endif rb_define_method(cDir,"each", dir_each, 0); rb_define_method(cDir,"rewind", dir_rewind, 0); rb_define_method(cDir,"tell", dir_tell, 0); |