From 7103e032746df1b4359f6e6a6bb117ad7a434aa1 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Wed, 13 Mar 2013 09:55:06 +0900 Subject: mrb_sys_fail raises SystemCallError if we have it. --- src/error.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/error.c') diff --git a/src/error.c b/src/error.c index ed30173bc..9dd8890ba 100644 --- a/src/error.c +++ b/src/error.c @@ -5,6 +5,7 @@ */ #include "mruby.h" +#include #include #include #include @@ -401,7 +402,20 @@ mrb_make_exception(mrb_state *mrb, int argc, mrb_value *argv) void mrb_sys_fail(mrb_state *mrb, const char *mesg) { - mrb_raise(mrb, E_RUNTIME_ERROR, mesg); + struct RClass *sce; + mrb_int no; + + no = (mrb_int)errno; + if (mrb_class_defined(mrb, "SystemCallError")) { + sce = mrb_class_get(mrb, "SystemCallError"); + if (mesg != NULL) { + mrb_funcall(mrb, mrb_obj_value(sce), "_sys_fail", 2, mrb_fixnum_value(no), mrb_str_new2(mrb, mesg)); + } else { + mrb_funcall(mrb, mrb_obj_value(sce), "_sys_fail", 1, mrb_fixnum_value(no)); + } + } else { + mrb_raise(mrb, E_RUNTIME_ERROR, mesg); + } } void -- cgit v1.2.3 From c0b844033f19cc6ae2a2beee5383f335eebaeba4 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Wed, 13 Mar 2013 10:29:17 +0900 Subject: mrb_str_new2 -> mrb_str_new_cstr --- src/error.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/error.c') diff --git a/src/error.c b/src/error.c index 98b32a7bb..6bd891768 100644 --- a/src/error.c +++ b/src/error.c @@ -409,7 +409,7 @@ mrb_sys_fail(mrb_state *mrb, const char *mesg) if (mrb_class_defined(mrb, "SystemCallError")) { sce = mrb_class_get(mrb, "SystemCallError"); if (mesg != NULL) { - mrb_funcall(mrb, mrb_obj_value(sce), "_sys_fail", 2, mrb_fixnum_value(no), mrb_str_new2(mrb, mesg)); + mrb_funcall(mrb, mrb_obj_value(sce), "_sys_fail", 2, mrb_fixnum_value(no), mrb_str_new_cstr(mrb, mesg)); } else { mrb_funcall(mrb, mrb_obj_value(sce), "_sys_fail", 1, mrb_fixnum_value(no)); } -- cgit v1.2.3