mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) 49661,49662,49664:
test_file_exhaustive.rb: remove useless assignment * test/ruby/test_file_exhaustive.rb (make_tmp_filename): not assign to instance variable, @hardlinkfile. * file.c (rb_file_identical_p): fix handle leak, ensure to close the handle of the first argument. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@49677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
10957cd1cc
commit
6d0b1d8a86
4 changed files with 53 additions and 5 deletions
|
|
@ -1,3 +1,8 @@
|
|||
Sun Feb 22 02:16:40 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* file.c (rb_file_identical_p): fix handle leak, ensure to close
|
||||
the handle of the first argument.
|
||||
|
||||
Sat Feb 21 13:48:11 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* win32/win32.c (different_device_p): compare by volume serial
|
||||
|
|
|
|||
30
file.c
30
file.c
|
|
@ -1052,6 +1052,25 @@ w32_io_info(VALUE *file, BY_HANDLE_FILE_INFORMATION *st)
|
|||
if (ret) CloseHandle(ret);
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
close_handle(VALUE h)
|
||||
{
|
||||
CloseHandle((HANDLE)h);
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
struct w32_io_info_args {
|
||||
VALUE *fname;
|
||||
BY_HANDLE_FILE_INFORMATION *st;
|
||||
};
|
||||
|
||||
static VALUE
|
||||
call_w32_io_info(VALUE arg)
|
||||
{
|
||||
struct w32_io_info_args *p = (void *)arg;
|
||||
return (VALUE)w32_io_info(p->fname, p->st);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
@ -1915,8 +1934,15 @@ rb_file_identical_p(VALUE obj, VALUE fname1, VALUE fname2)
|
|||
# ifdef _WIN32
|
||||
f1 = w32_io_info(&fname1, &st1);
|
||||
if (f1 == INVALID_HANDLE_VALUE) return Qfalse;
|
||||
f2 = w32_io_info(&fname2, &st2);
|
||||
if (f1) CloseHandle(f1);
|
||||
if (f1) {
|
||||
struct w32_io_info_args arg;
|
||||
arg.fname = &fname2;
|
||||
arg.st = &st2;
|
||||
f2 = (HANDLE)rb_ensure(call_w32_io_info, (VALUE)&arg, close_handle, (VALUE)f1);
|
||||
}
|
||||
else {
|
||||
f2 = w32_io_info(&fname2, &st2);
|
||||
}
|
||||
if (f2 == INVALID_HANDLE_VALUE) return Qfalse;
|
||||
if (f2) CloseHandle(f2);
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ class TestFileExhaustive < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def make_tmp_filename(prefix)
|
||||
@hardlinkfile = @dir + "/" + prefix + File.basename(__FILE__) + ".#{$$}.test"
|
||||
"#{@dir}/#{prefix}#{File.basename(__FILE__)}.#{$$}.test"
|
||||
end
|
||||
|
||||
def test_path
|
||||
|
|
@ -291,13 +291,30 @@ class TestFileExhaustive < Test::Unit::TestCase
|
|||
assert_file.not_sticky?(@file)
|
||||
end
|
||||
|
||||
def test_identical_p
|
||||
def test_path_identical_p
|
||||
assert_file.identical?(@file, @file)
|
||||
assert_file.not_identical?(@file, @zerofile)
|
||||
assert_file.not_identical?(@file, @nofile)
|
||||
assert_file.not_identical?(@nofile, @file)
|
||||
end
|
||||
|
||||
def test_io_identical_p
|
||||
open(@file) {|f|
|
||||
assert_file.identical?(f, f)
|
||||
assert_file.identical?(@file, f)
|
||||
assert_file.identical?(f, @file)
|
||||
}
|
||||
end
|
||||
|
||||
def test_closed_io_identical_p
|
||||
io = open(@file) {|f| f}
|
||||
assert_raise(IOError) {
|
||||
File.identical?(@file, io)
|
||||
}
|
||||
File.unlink(@file)
|
||||
assert_file.not_exist?(@file)
|
||||
end
|
||||
|
||||
def test_s_size
|
||||
assert_integer(File.size(@dir))
|
||||
assert_equal(3, File.size(@file))
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#define RUBY_VERSION "2.2.0"
|
||||
#define RUBY_RELEASE_DATE "2015-02-22"
|
||||
#define RUBY_PATCHLEVEL 74
|
||||
#define RUBY_PATCHLEVEL 75
|
||||
|
||||
#define RUBY_RELEASE_YEAR 2015
|
||||
#define RUBY_RELEASE_MONTH 2
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue