[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]