diff options
Diffstat (limited to 'error.c')
-rw-r--r-- | error.c | 21 |
1 files changed, 20 insertions, 1 deletions
@@ -1532,18 +1532,29 @@ static VALUE make_errno_exc(const char *mesg) { int n = errno; - VALUE arg; errno = 0; if (n == 0) { rb_bug("rb_sys_fail(%s) - errno == 0", mesg ? mesg : ""); } + return rb_syserr_new(n, mesg); +} +VALUE +rb_syserr_new(int n, const char *mesg) +{ + VALUE arg; arg = mesg ? rb_str_new2(mesg) : Qnil; return rb_class_new_instance(1, &arg, get_syserr(n)); } void +rb_syserr_fail(int e, const char *mesg) +{ + rb_exc_raise(rb_syserr_new(e, mesg)); +} + +void rb_sys_fail(const char *mesg) { rb_exc_raise(make_errno_exc(mesg)); @@ -1558,6 +1569,14 @@ rb_mod_sys_fail(VALUE mod, const char *mesg) } void +rb_mod_syserr_fail(VALUE mod, int e, const char *mesg) +{ + VALUE exc = rb_syserr_new(e, mesg); + rb_extend_object(exc, mod); + rb_exc_raise(exc); +} + +void rb_sys_warning(const char *fmt, ...) { char buf[BUFSIZ]; |