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

ruby-changes:9629

From: matz <ko1@a...>
Date: Mon, 29 Dec 2008 18:07:34 +0900 (JST)
Subject: [ruby-changes:9629] Ruby:r21169 (trunk): * ext/io/wait/wait.c (io_nread): returns number of bytes available

matz	2008-12-29 18:07:20 +0900 (Mon, 29 Dec 2008)

  New Revision: 21169

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21169

  Log:
    * ext/io/wait/wait.c (io_nread): returns number of bytes available
      for read.  response to feature request #936 in [ruby-core:20917].

  Modified files:
    trunk/ChangeLog
    trunk/ext/io/wait/wait.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21168)
+++ ChangeLog	(revision 21169)
@@ -1,3 +1,8 @@
+Mon Dec 29 18:02:45 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* ext/io/wait/wait.c (io_nread): returns number of bytes available
+	  for read.  response to feature request #936 in [ruby-core:20917].
+
 Mon Dec 29 17:52:16 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* ext/io/wait/wait.c (io_ready_p): updated to follow RDoc.
Index: ext/io/wait/wait.c
===================================================================
--- ext/io/wait/wait.c	(revision 21168)
+++ ext/io/wait/wait.c	(revision 21169)
@@ -44,6 +44,31 @@
 
 /*
  * call-seq:
+ *   io.nread -> int
+ *
+ * Returns number of bytes that can be read without blocking.
+ * Returns zero if no information available.
+ */
+
+static VALUE
+io_nread(VALUE io)
+{
+    rb_io_t *fptr;
+    int len;
+    ioctl_arg n;
+
+    GetOpenFile(io, fptr);
+    rb_io_check_readable(fptr);
+    len = rb_io_read_pending(fptr);
+    if (len > 0) return len;
+    if (!FIONREAD_POSSIBLE_P(fptr->fd)) return INT2FIX(0);
+    if (ioctl(fptr->fd, FIONREAD, &n)) return INT2FIX(0);
+    if (n > 0) return ioctl_arg2num(n);
+    return INT2FIX(0);
+}
+
+/*
+ * call-seq:
  *   io.ready? -> true, false or nil
  *
  * Returns true if input available without blocking, or false.
@@ -137,6 +162,7 @@
 void
 Init_wait()
 {
+    rb_define_method(rb_cIO, "nread", io_nread, 0);
     rb_define_method(rb_cIO, "ready?", io_ready_p, 0);
     rb_define_method(rb_cIO, "wait", io_wait, -1);
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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