ruby-changes:19388
From: kosaki <ko1@a...>
Date: Wed, 4 May 2011 18:50:45 +0900 (JST)
Subject: [ruby-changes:19388] Ruby:r31428 (trunk): * ext/-test-/wait_for_single_fd: New. for testing
kosaki 2011-05-04 18:50:27 +0900 (Wed, 04 May 2011) New Revision: 31428 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31428 Log: * ext/-test-/wait_for_single_fd: New. for testing rb_wait_for_single_fd() internal function. The patch was written by Eric Wong. [ruby-core:35991] * test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb: ditto. Added directories: trunk/ext/-test-/wait_for_single_fd/ trunk/test/-ext-/wait_for_single_fd/ Added files: trunk/ext/-test-/wait_for_single_fd/depend trunk/ext/-test-/wait_for_single_fd/extconf.rb trunk/ext/-test-/wait_for_single_fd/wait_for_single_fd.c trunk/test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb Modified files: trunk/ChangeLog Index: ChangeLog =================================================================== --- ChangeLog (revision 31427) +++ ChangeLog (revision 31428) @@ -1,3 +1,11 @@ +Wed May 4 18:46:39 2011 KOSAKI Motohiro <kosaki.motohiro@g...> + + * ext/-test-/wait_for_single_fd: New. for testing + rb_wait_for_single_fd() internal function. + The patch was written by Eric Wong. [ruby-core:35991] + + * test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb: ditto. + Wed May 4 12:46:25 2011 KOSAKI Motohiro <kosaki.motohiro@g...> * thread.c (rb_wait_for_single_fd): Added POLLNVAL check. Index: ext/-test-/wait_for_single_fd/depend =================================================================== --- ext/-test-/wait_for_single_fd/depend (revision 0) +++ ext/-test-/wait_for_single_fd/depend (revision 31428) @@ -0,0 +1,2 @@ +wait_for_single_fd.o: $(top_srcdir)/thread.c \ + $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/io.h Index: ext/-test-/wait_for_single_fd/wait_for_single_fd.c =================================================================== --- ext/-test-/wait_for_single_fd/wait_for_single_fd.c (revision 0) +++ ext/-test-/wait_for_single_fd/wait_for_single_fd.c (revision 31428) @@ -0,0 +1,30 @@ +#include "ruby/ruby.h" +#include "ruby/io.h" + +static VALUE +wait_for_single_fd(VALUE ign, VALUE fd, VALUE events, VALUE timeout) +{ + struct timeval tv; + struct timeval *tvp = NULL; + int rc; + + if (!NIL_P(timeout)) { + tv = rb_time_timeval(timeout); + tvp = &tv; + } + + rc = rb_wait_for_single_fd(NUM2INT(fd), NUM2INT(events), tvp); + if (rc == -1) + rb_sys_fail("rb_wait_for_single_fd"); + return INT2NUM(rc); +} + +void +Init_wait_for_single_fd(void) +{ + rb_define_const(rb_cObject, "RB_WAITFD_IN", INT2NUM(RB_WAITFD_IN)); + rb_define_const(rb_cObject, "RB_WAITFD_OUT", INT2NUM(RB_WAITFD_OUT)); + rb_define_const(rb_cObject, "RB_WAITFD_PRI", INT2NUM(RB_WAITFD_PRI)); + rb_define_singleton_method(rb_cIO, "wait_for_single_fd", + wait_for_single_fd, 3); +} Index: ext/-test-/wait_for_single_fd/extconf.rb =================================================================== --- ext/-test-/wait_for_single_fd/extconf.rb (revision 0) +++ ext/-test-/wait_for_single_fd/extconf.rb (revision 31428) @@ -0,0 +1 @@ +create_makefile("-test-/wait_for_single_fd/wait_for_single_fd") Index: test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb =================================================================== --- test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb (revision 0) +++ test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb (revision 31428) @@ -0,0 +1,32 @@ +require 'test/unit' + +class TestWaitForSingleFD < Test::Unit::TestCase + require '-test-/wait_for_single_fd/wait_for_single_fd' + + def with_pipe + r, w = IO.pipe + begin + yield r, w + ensure + r.close unless r.closed? + w.close unless w.closed? + end + end + + def test_wait_for_valid_fd + with_pipe do |r,w| + rc = IO.wait_for_single_fd(w.fileno, RB_WAITFD_OUT, nil) + assert_equal RB_WAITFD_OUT, rc + end + end + + def test_wait_for_invalid_fd + with_pipe do |r,w| + wfd = w.fileno + w.close + assert_raises(Errno::EBADF) do + IO.wait_for_single_fd(wfd, RB_WAITFD_OUT, nil) + end + end + end +end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/