summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
Diffstat (limited to 'error.c')
-rw-r--r--error.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/error.c b/error.c
index dbbf0d0287..26dec201cd 100644
--- a/error.c
+++ b/error.c
@@ -542,11 +542,17 @@ syserr_initialize(argc, argv, self)
char *err;
char *buf;
VALUE error, mesg;
+ VALUE klass = rb_obj_class(self);
- if (rb_scan_args(argc, argv, "11", &mesg, &error) == 1 && FIXNUM_P(mesg)) {
+ rb_scan_args(argc, argv, klass == rb_eSystemCallError ? "11" : "02",
+ &mesg, &error);
+ if (argc == 1 && FIXNUM_P(mesg)) {
error = mesg;
mesg = Qnil;
}
+ if (klass != rb_eSystemCallError && NIL_P(error)) {
+ error = rb_const_get_at(klass, rb_intern("Errno"));
+ }
err = strerror(NUM2LONG(error));
if (!err) err = "Unknown error";
if (RTEST(mesg)) {