зеркало из https://github.com/github/ruby.git
dir.c: don't raise after close
* dir.c (dir_close): don't raise on dobule close for consistent to IO#close. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
2ffb87995a
Коммит
78a73a538d
|
@ -1,3 +1,8 @@
|
|||
Mon Mar 23 23:18:27 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* dir.c (dir_close): don't raise on dobule close for consistent to
|
||||
IO#close.
|
||||
|
||||
Mon Mar 23 21:22:07 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* win32/file.c (rb_readlink): move from file.c for better buffer
|
||||
|
|
14
dir.c
14
dir.c
|
@ -542,12 +542,17 @@ dir_closed(void)
|
|||
rb_raise(rb_eIOError, "closed directory");
|
||||
}
|
||||
|
||||
static struct dir_data *
|
||||
dir_get(VALUE dir)
|
||||
{
|
||||
rb_check_frozen(dir);
|
||||
return rb_check_typeddata(dir, &dir_data_type);
|
||||
}
|
||||
|
||||
static struct dir_data *
|
||||
dir_check(VALUE dir)
|
||||
{
|
||||
struct dir_data *dirp;
|
||||
rb_check_frozen(dir);
|
||||
dirp = rb_check_typeddata(dir, &dir_data_type);
|
||||
struct dir_data *dirp = dir_get(dir);
|
||||
if (!dirp->dir) dir_closed();
|
||||
return dirp;
|
||||
}
|
||||
|
@ -831,7 +836,8 @@ dir_close(VALUE dir)
|
|||
{
|
||||
struct dir_data *dirp;
|
||||
|
||||
GetDIR(dir, dirp);
|
||||
dirp = dir_get(dir);
|
||||
if (!dirp->dir) return Qnil;
|
||||
closedir(dirp->dir);
|
||||
dirp->dir = NULL;
|
||||
|
||||
|
|
|
@ -126,6 +126,7 @@ class TestDir < Test::Unit::TestCase
|
|||
def test_close
|
||||
d = Dir.open(@root)
|
||||
d.close
|
||||
assert_nothing_raised(IOError) { d.close }
|
||||
assert_raise(IOError) { d.read }
|
||||
end
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче