diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-11 01:34:42 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-11 01:34:42 +0000 |
commit | fefba781bc0c4ba675d62bd29ecb0a2c4c5d134d (patch) | |
tree | c2fe603d4ff2584bfd67bbaa7fa05cc10b1f9963 /process.c | |
parent | 5f3470b3a018fbe47480900330dd1a12e745ad08 (diff) |
* process.c (rb_exit_status_code): extract from rb_f_exit_bang and
rb_f_exit. assume 0 to be success in Kernel#exit! too.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34005 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r-- | process.c | 51 |
1 files changed, 25 insertions, 26 deletions
@@ -2795,6 +2795,29 @@ rb_f_fork(VALUE obj) #define rb_f_fork rb_f_notimplement #endif +static int +exit_status_code(VALUE status) +{ + int istatus; + + switch (status) { + case Qtrue: + istatus = EXIT_SUCCESS; + break; + case Qfalse: + istatus = EXIT_FAILURE; + break; + default: + istatus = NUM2INT(status); +#if EXIT_SUCCESS != 0 + if (istatus == 0) + istatus = EXIT_SUCCESS; +#endif + break; + } + return istatus; +} + /* * call-seq: * Process.exit!(status=false) @@ -2814,17 +2837,7 @@ rb_f_exit_bang(int argc, VALUE *argv, VALUE obj) rb_secure(4); if (argc > 0 && rb_scan_args(argc, argv, "01", &status) == 1) { - switch (status) { - case Qtrue: - istatus = EXIT_SUCCESS; - break; - case Qfalse: - istatus = EXIT_FAILURE; - break; - default: - istatus = NUM2INT(status); - break; - } + istatus = exit_status_code(status); } else { istatus = EXIT_FAILURE; @@ -2898,21 +2911,7 @@ rb_f_exit(int argc, VALUE *argv) rb_secure(4); if (argc > 0 && rb_scan_args(argc, argv, "01", &status) == 1) { - switch (status) { - case Qtrue: - istatus = EXIT_SUCCESS; - break; - case Qfalse: - istatus = EXIT_FAILURE; - break; - default: - istatus = NUM2INT(status); -#if EXIT_SUCCESS != 0 - if (istatus == 0) - istatus = EXIT_SUCCESS; -#endif - break; - } + istatus = exit_status_code(status); } else { istatus = EXIT_SUCCESS; |