summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-exit/src/mruby-exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-exit/src/mruby-exit.c')
-rw-r--r--mrbgems/mruby-exit/src/mruby-exit.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/mrbgems/mruby-exit/src/mruby-exit.c b/mrbgems/mruby-exit/src/mruby-exit.c
index 726dfd7c4..4ff2f932c 100644
--- a/mrbgems/mruby-exit/src/mruby-exit.c
+++ b/mrbgems/mruby-exit/src/mruby-exit.c
@@ -1,15 +1,20 @@
#include <stdlib.h>
-#include "mruby.h"
+#include <mruby.h>
static mrb_value
f_exit(mrb_state *mrb, mrb_value self)
{
- mrb_int i = EXIT_SUCCESS;
+ mrb_value status = mrb_true_value();
+ int istatus;
+
+ mrb_get_args(mrb, "|o", &status);
+ istatus = mrb_true_p(status) ? EXIT_SUCCESS :
+ mrb_false_p(status) ? EXIT_FAILURE :
+ (int)mrb_int(mrb, status);
+ exit(istatus);
- mrb_get_args(mrb, "|i", &i);
- exit(i);
/* not reached */
- return mrb_nil_value();
+ return status;
}
void