зеркало из https://github.com/github/ruby.git
* io.c (Init_IO): Added File::CLOEXEC constant. [ruby-core:22893] [Feature #1291]
* test/ruby/test_io.rb (TestIO#test_o_cloexec): test for File::CLOEXEC. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
c06da4735d
Коммит
be62297f92
|
@ -1,3 +1,9 @@
|
|||
Wed May 4 20:22:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
|
||||
|
||||
* io.c (Init_IO): Added File::CLOEXEC constant.
|
||||
[ruby-core:22893] [Feature #1291]
|
||||
* test/ruby/test_io.rb (TestIO#test_o_cloexec): test for File::CLOEXEC.
|
||||
|
||||
Wed May 4 19:00:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
|
||||
|
||||
* thread.c (rb_wait_for_single_fd): Fix wrong return value.
|
||||
|
|
4
io.c
4
io.c
|
@ -10576,6 +10576,10 @@ Init_IO(void)
|
|||
/* Try to minimize cache effects of the I/O to and from this file. */
|
||||
rb_file_const("DIRECT", INT2FIX(O_DIRECT));
|
||||
#endif
|
||||
#ifdef O_CLOEXEC
|
||||
/* enable close-on-exec flag */
|
||||
rb_file_const("CLOEXEC", INT2FIX(O_CLOEXEC)); /* Linux, POSIX-2008. */
|
||||
#endif
|
||||
|
||||
sym_mode = ID2SYM(rb_intern("mode"));
|
||||
sym_perm = ID2SYM(rb_intern("perm"));
|
||||
|
|
|
@ -1238,6 +1238,37 @@ class TestIO < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_O_CLOEXEC
|
||||
if !defined? File::CLOEXEC
|
||||
return
|
||||
end
|
||||
|
||||
mkcdtmpdir do
|
||||
normal_file = Tempfile.new("normal_file");
|
||||
assert_equal(false, normal_file.close_on_exec?)
|
||||
|
||||
cloexec_file = Tempfile.new("cloexec_file", :mode => File::CLOEXEC);
|
||||
assert_equal(true, cloexec_file.close_on_exec?)
|
||||
|
||||
argfile = Tempfile.new("argfile");
|
||||
|
||||
argfile.puts normal_file.fileno
|
||||
argfile.puts cloexec_file.fileno
|
||||
argfile.flush
|
||||
|
||||
ruby('-e', <<-'End', argfile.path) { |f|
|
||||
begin
|
||||
puts IO.for_fd(ARGF.gets.to_i).fileno
|
||||
puts IO.for_fd(ARGF.gets.to_i).fileno
|
||||
rescue
|
||||
puts "nofile"
|
||||
end
|
||||
End
|
||||
assert_equal("#{normal_file.fileno}\nnofile\n", f.read)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def test_close_security_error
|
||||
with_pipe do |r, w|
|
||||
assert_raise(SecurityError) do
|
||||
|
|
Загрузка…
Ссылка в новой задаче