diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | error.c | 12 |
2 files changed, 14 insertions, 3 deletions
@@ -1,3 +1,8 @@ +Tue Dec 21 00:22:44 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com> + + * error.c (exit_success_p): Check status code more carefully. + status code may have garbage in upper bit. + Mon Dec 20 23:12:37 2010 Tanaka Akira <akr@fsij.org> * node.c: parenthesize macro arguments. @@ -710,9 +710,15 @@ exit_status(VALUE exc) static VALUE exit_success_p(VALUE exc) { - VALUE status = rb_attr_get(exc, rb_intern("status")); - if (NIL_P(status)) return Qtrue; - if (status == INT2FIX(EXIT_SUCCESS)) return Qtrue; + VALUE status_val = rb_attr_get(exc, rb_intern("status")); + int status; + + if (NIL_P(status_val)) + return Qtrue; + status = NUM2INT(status_val); + if (WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS) + return Qtrue; + return Qfalse; } |