summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-15 13:37:47 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-15 13:37:47 +0000
commit29c2876d610275a42642ecb67ddc28906e484968 (patch)
tree8e23622a2735a6e446ea8c6b68847cb963b04896 /signal.c
parent980155686aa373e015f51e3e279403d2aa66d4b9 (diff)
* signal.c (rb_f_kill): accept '-SIGXXX' style signal with Symbol or
implicit convertion with #to_str. [ruby-dev:43169] fixes #4362 * test/ruby/test_signal.rb (test_signal_process_group): add a test for send signal to process group. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31579 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/signal.c b/signal.c
index af129cad74..c7ad67fc81 100644
--- a/signal.c
+++ b/signal.c
@@ -359,6 +359,7 @@ rb_f_kill(int argc, VALUE *argv)
int negative = 0;
int sig;
int i;
+ volatile VALUE str;
const char *s;
rb_secure(2);
@@ -376,11 +377,11 @@ rb_f_kill(int argc, VALUE *argv)
case T_STRING:
s = RSTRING_PTR(argv[0]);
+ str_signal:
if (s[0] == '-') {
negative++;
s++;
}
- str_signal:
if (strncmp("SIG", s, 3) == 0)
s += 3;
if((sig = signm2signo(s)) == 0)
@@ -391,17 +392,13 @@ rb_f_kill(int argc, VALUE *argv)
break;
default:
- {
- VALUE str;
-
- str = rb_check_string_type(argv[0]);
- if (!NIL_P(str)) {
- s = RSTRING_PTR(str);
- goto str_signal;
- }
- rb_raise(rb_eArgError, "bad signal type %s",
- rb_obj_classname(argv[0]));
+ str = rb_check_string_type(argv[0]);
+ if (!NIL_P(str)) {
+ s = RSTRING_PTR(str);
+ goto str_signal;
}
+ rb_raise(rb_eArgError, "bad signal type %s",
+ rb_obj_classname(argv[0]));
break;
}