diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-04-12 00:53:28 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-04-12 00:53:28 +0000 |
commit | b850ec46801524eaeb5c7a8d6f8edfd428db787e (patch) | |
tree | c3ff46997d4b3c5c9dbb8e2ba7e9b8c92e1379ac | |
parent | 77ea0461c9cf437a3527c12086d02c3febf52bd3 (diff) | |
download | ruby-b850ec46801524eaeb5c7a8d6f8edfd428db787e.tar.gz |
wait.c: wait_for_single_fd
* ext/io/wait/wait.c (wait_for_single_fd): extract wrapper
function of rb_wait_for_single_fd().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ext/io/wait/wait.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/ext/io/wait/wait.c b/ext/io/wait/wait.c index ca37d8e84a..2a4a10306a 100644 --- a/ext/io/wait/wait.c +++ b/ext/io/wait/wait.c @@ -58,6 +58,16 @@ get_timeout(int argc, VALUE *argv, struct timeval *timerec) } } +static int +wait_for_single_fd(rb_io_t *fptr, int events, struct timeval *tv) +{ + int i = rb_wait_for_single_fd(fptr->fd, events, tv); + if (i < 0) + rb_sys_fail(0); + rb_io_check_closed(fptr); + return (i & events); +} + /* * call-seq: * io.nread -> int @@ -121,7 +131,6 @@ static VALUE io_wait_readable(int argc, VALUE *argv, VALUE io) { rb_io_t *fptr; - int i; ioctl_arg n; struct timeval timerec; struct timeval *tv; @@ -131,10 +140,7 @@ io_wait_readable(int argc, VALUE *argv, VALUE io) tv = get_timeout(argc, argv, &timerec); if (rb_io_read_pending(fptr)) return Qtrue; if (!FIONREAD_POSSIBLE_P(fptr->fd)) return Qfalse; - i = rb_wait_for_single_fd(fptr->fd, RB_WAITFD_IN, tv); - if (i < 0) - rb_sys_fail(0); - rb_io_check_closed(fptr); + wait_for_single_fd(fptr, RB_WAITFD_IN, tv); if (ioctl(fptr->fd, FIONREAD, &n)) rb_sys_fail(0); if (n > 0) return io; return Qnil; @@ -152,19 +158,15 @@ static VALUE io_wait_writable(int argc, VALUE *argv, VALUE io) { rb_io_t *fptr; - int i; struct timeval timerec; struct timeval *tv; GetOpenFile(io, fptr); rb_io_check_writable(fptr); tv = get_timeout(argc, argv, &timerec); - i = rb_wait_for_single_fd(fptr->fd, RB_WAITFD_OUT, tv); - if (i < 0) - rb_sys_fail(0); - rb_io_check_closed(fptr); - if (i & RB_WAITFD_OUT) + if (wait_for_single_fd(fptr, RB_WAITFD_OUT, tv)) { return io; + } return Qnil; } |