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

ruby-changes:21666

From: kosaki <ko1@a...>
Date: Sat, 12 Nov 2011 11:17:52 +0900 (JST)
Subject: [ruby-changes:21666] kosaki:r33715 (trunk): * io.c (struct io_cntl_arg): remove io_p member.

kosaki	2011-11-12 11:17:41 +0900 (Sat, 12 Nov 2011)

  New Revision: 33715

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

  Log:
    * io.c (struct io_cntl_arg): remove io_p member.
    * io.c (nogvl_fcntl, do_fcntl, rb_fcntl): separated from ioctl functions.
    * io.c (nogvl_io_cntl): remove fcntl depended logic.
    * io.c (io_cntl): ditto.
    * io.c (rb_io_ctl): ditto.
    * io.c (rb_io_ioctl): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/io.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 33714)
+++ ChangeLog	(revision 33715)
@@ -1,3 +1,12 @@
+Sat Nov 12 11:00:42 2011  KOSAKI Motohiro  <kosaki.motohiro@g...>
+
+	* io.c (struct io_cntl_arg): remove io_p member.
+	* io.c (nogvl_fcntl, do_fcntl, rb_fcntl): separated from ioctl functions.
+	* io.c (nogvl_io_cntl): remove fcntl depended logic.
+	* io.c (io_cntl): ditto.
+	* io.c (rb_io_ctl): ditto.
+	* io.c (rb_io_ioctl): ditto.
+
 Sat Nov 12 10:59:49 2011  KOSAKI Motohiro  <kosaki.motohiro@g...>
 
 	* io.c (setup_narg): fix off by one bug.
Index: io.c
===================================================================
--- io.c	(revision 33714)
+++ io.c	(revision 33715)
@@ -7860,51 +7860,30 @@
     return rb_ensure(select_call, (VALUE)&args, select_end, (VALUE)&args);
 }
 
-struct io_cntl_arg {
+struct ioctl_arg {
     int		fd;
     int		cmd;
     long	narg;
-    int		io_p;
 };
 
-static VALUE nogvl_io_cntl(void *ptr)
+static VALUE nogvl_ioctl(void *ptr)
 {
-    struct io_cntl_arg *arg = ptr;
+    struct ioctl_arg *arg = ptr;
 
-    if (arg->io_p)
-	return (VALUE)ioctl(arg->fd, arg->cmd, arg->narg);
-    else
-#if defined(F_DUPFD)
-        if (arg->cmd == F_DUPFD)
-            return (VALUE)rb_cloexec_fcntl_dupfd(arg->fd, (int)arg->narg);
-        else
-#endif
-            return (VALUE)fcntl(arg->fd, arg->cmd, arg->narg);
+    return (VALUE)ioctl(arg->fd, arg->cmd, arg->narg);
 }
 
 static int
-io_cntl(int fd, int cmd, long narg, int io_p)
+do_ioctl(int fd, int cmd, long narg)
 {
     int retval;
-    struct io_cntl_arg arg;
+    struct ioctl_arg arg;
 
-#ifndef HAVE_FCNTL
-    if (!io_p) {
-	rb_notimplement();
-    }
-#endif
-
     arg.fd = fd;
     arg.cmd = cmd;
     arg.narg = narg;
-    arg.io_p = io_p;
 
-    retval = (int)rb_thread_io_blocking_region(nogvl_io_cntl, &arg, fd);
-#if defined(F_DUPFD)
-    if (!io_p && retval != -1 && cmd == F_DUPFD) {
-	rb_update_max_fd(retval);
-    }
-#endif
+    retval = (int)rb_thread_io_blocking_region(nogvl_ioctl, &arg, fd);
 
     return retval;
 }
@@ -7973,7 +7952,7 @@
 }
 
 static VALUE
-rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
+rb_ioctl(VALUE io, VALUE req, VALUE arg)
 {
     int cmd = NUM2INT(req);
     rb_io_t *fptr;
@@ -7982,28 +7961,17 @@
 
     rb_secure(2);
 
-    narg = setup_narg(cmd, &arg, io_p);
+    narg = setup_narg(cmd, &arg, 1);
     GetOpenFile(io, fptr);
-    retval = io_cntl(fptr->fd, cmd, narg, io_p);
+    retval = do_ioctl(fptr->fd, cmd, narg);
     if (retval < 0) rb_sys_fail_path(fptr->pathv);
     if (RB_TYPE_P(arg, T_STRING) && RSTRING_PTR(arg)[RSTRING_LEN(arg)-1] != 17) {
 	rb_raise(rb_eArgError, "return value overflowed string");
     }
 
-    if (!io_p && cmd == F_SETFL) {
-	if (narg & O_NONBLOCK) {
-	    fptr->mode |= FMODE_WSPLIT_INITIALIZED;
-	    fptr->mode &= ~FMODE_WSPLIT;
-	}
-	else {
-	    fptr->mode &= ~(FMODE_WSPLIT_INITIALIZED|FMODE_WSPLIT);
-	}
-    }
-
     return INT2NUM(retval);
 }
 
-
 /*
  *  call-seq:
  *     ios.ioctl(integer_cmd, arg)    -> integer
@@ -8022,10 +7990,78 @@
     VALUE req, arg;
 
     rb_scan_args(argc, argv, "11", &req, &arg);
-    return rb_io_ctl(io, req, arg, 1);
+    return rb_ioctl(io, req, arg);
 }
 
 #ifdef HAVE_FCNTL
+struct fcntl_arg {
+    int		fd;
+    int 	cmd;
+    long	narg;
+};
+
+static VALUE nogvl_fcntl(void *ptr)
+{
+    struct fcntl_arg *arg = ptr;
+
+#if defined(F_DUPFD)
+    if (arg->cmd == F_DUPFD)
+	return (VALUE)rb_cloexec_fcntl_dupfd(arg->fd, (int)arg->narg);
+#endif
+    return (VALUE)fcntl(arg->fd, arg->cmd, arg->narg);
+}
+
+static int
+do_fcntl(int fd, int cmd, long narg)
+{
+    int retval;
+    struct fcntl_arg arg;
+
+    arg.fd = fd;
+    arg.cmd = cmd;
+    arg.narg = narg;
+
+    retval = (int)rb_thread_io_blocking_region(nogvl_fcntl, &arg, fd);
+#if defined(F_DUPFD)
+    if (retval != -1 && cmd == F_DUPFD) {
+	rb_update_max_fd(retval);
+    }
+#endif
+
+    return retval;
+}
+
+static VALUE
+rb_fcntl(VALUE io, VALUE req, VALUE arg)
+{
+    int cmd = NUM2INT(req);
+    rb_io_t *fptr;
+    long narg;
+    int retval;
+
+    rb_secure(2);
+
+    narg = setup_narg(cmd, &arg, 0);
+    GetOpenFile(io, fptr);
+    retval = do_fcntl(fptr->fd, cmd, narg);
+    if (retval < 0) rb_sys_fail_path(fptr->pathv);
+    if (RB_TYPE_P(arg, T_STRING) && RSTRING_PTR(arg)[RSTRING_LEN(arg)-1] != 17) {
+	rb_raise(rb_eArgError, "return value overflowed string");
+    }
+
+    if (cmd == F_SETFL) {
+	if (narg & O_NONBLOCK) {
+	    fptr->mode |= FMODE_WSPLIT_INITIALIZED;
+	    fptr->mode &= ~FMODE_WSPLIT;
+	}
+	else {
+	    fptr->mode &= ~(FMODE_WSPLIT_INITIALIZED|FMODE_WSPLIT);
+	}
+    }
+
+    return INT2NUM(retval);
+}
+
 /*
  *  call-seq:
  *     ios.fcntl(integer_cmd, arg)    -> integer
@@ -8045,7 +8081,7 @@
     VALUE req, arg;
 
     rb_scan_args(argc, argv, "11", &req, &arg);
-    return rb_io_ctl(io, req, arg, 0);
+    return rb_fcntl(io, req, arg);
 }
 #else
 #define rb_io_fcntl rb_f_notimplement

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

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