Skip to content

Commit

Permalink
Refactored rb_readwrite_syserr_fail
Browse files Browse the repository at this point in the history
* renamed argument `writable` as `waiting`
* hosited out creating and raising exception
* turned into a `switch`
  • Loading branch information
nobu committed Apr 17, 2020
1 parent 00d9278 commit b5132d9
Showing 1 changed file with 20 additions and 18 deletions.
38 changes: 20 additions & 18 deletions io.c
Expand Up @@ -13014,53 +13014,55 @@ argf_write(VALUE argf, VALUE str)
}

void
rb_readwrite_sys_fail(enum rb_io_wait_readwrite writable, const char *mesg)
rb_readwrite_sys_fail(enum rb_io_wait_readwrite waiting, const char *mesg)
{
rb_readwrite_syserr_fail(writable, errno, mesg);
rb_readwrite_syserr_fail(waiting, errno, mesg);
}

void
rb_readwrite_syserr_fail(enum rb_io_wait_readwrite writable, int n, const char *mesg)
rb_readwrite_syserr_fail(enum rb_io_wait_readwrite waiting, int n, const char *mesg)
{
VALUE arg;
VALUE arg, c = Qnil;
arg = mesg ? rb_str_new2(mesg) : Qnil;
if (writable == RB_IO_WAIT_WRITABLE) {
switch (waiting) {
case RB_IO_WAIT_WRITABLE:
switch (n) {
case EAGAIN:
rb_exc_raise(rb_class_new_instance(1, &arg, rb_eEAGAINWaitWritable));
c = rb_eEAGAINWaitWritable;
break;
#if EAGAIN != EWOULDBLOCK
case EWOULDBLOCK:
rb_exc_raise(rb_class_new_instance(1, &arg, rb_eEWOULDBLOCKWaitWritable));
c = rb_eEWOULDBLOCKWaitWritable;
break;
#endif
case EINPROGRESS:
rb_exc_raise(rb_class_new_instance(1, &arg, rb_eEINPROGRESSWaitWritable));
c = rb_eEINPROGRESSWaitWritable;
break;
default:
rb_mod_sys_fail_str(rb_mWaitWritable, arg);
rb_mod_syserr_fail_str(rb_mWaitWritable, n, arg);
}
}
else if (writable == RB_IO_WAIT_READABLE) {
break;
case RB_IO_WAIT_READABLE:
switch (n) {
case EAGAIN:
rb_exc_raise(rb_class_new_instance(1, &arg, rb_eEAGAINWaitReadable));
c = rb_eEAGAINWaitReadable;
break;
#if EAGAIN != EWOULDBLOCK
case EWOULDBLOCK:
rb_exc_raise(rb_class_new_instance(1, &arg, rb_eEWOULDBLOCKWaitReadable));
c = rb_eEWOULDBLOCKWaitReadable;
break;
#endif
case EINPROGRESS:
rb_exc_raise(rb_class_new_instance(1, &arg, rb_eEINPROGRESSWaitReadable));
c = rb_eEINPROGRESSWaitReadable;
break;
default:
rb_mod_sys_fail_str(rb_mWaitReadable, arg);
rb_mod_syserr_fail_str(rb_mWaitReadable, n, arg);
}
break;
default:
rb_bug("invalid read/write type passed to rb_readwrite_sys_fail: %d", waiting);
}
else {
rb_bug("invalid read/write type passed to rb_readwrite_sys_fail: %d", writable);
}
rb_exc_raise(rb_class_new_instance(1, &arg, c));
}

static VALUE
Expand Down

0 comments on commit b5132d9

Please sign in to comment.