summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-03-11 08:02:04 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-03-11 08:02:04 +0000
commit86c6af5873ae218a3fa92aed419de5b92653b9fb (patch)
tree40149bab7e1444f3ce2cd9517fede590dee6e4f1 /signal.c
parent81930da895afee14918490b072593860cb12d09b (diff)
* marshal.c (w_object): module inclusion using extend() should
also be detected. * eval.c (rb_eval_cmd): cbase should not be NULL; it should be either ruby_wrapper or Object. * enum.c (enum_each_with_index): should return self. * process.c (proc_setpgrp): should return value for non-void function. * process.c (proc_getpgid): should raise exception if getpgid() return -1. * string.c (rb_str_ljust): should return a duplicated string. * string.c (rb_str_rjust): ditto. * string.c (rb_str_center): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2172 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/signal.c b/signal.c
index 2ff32e5..c643fd4 100644
--- a/signal.c
+++ b/signal.c
@@ -217,26 +217,33 @@ rb_f_kill(argc, argv)
goto str_signal;
case T_STRING:
- {
- s = RSTRING(argv[0])->ptr;
- if (s[0] == '-') {
- negative++;
- s++;
- }
- str_signal:
- if (strncmp("SIG", s, 3) == 0)
- s += 3;
- if((sig = signm2signo(s)) == 0)
- rb_raise(rb_eArgError, "unrecognized signal name `%s'", s);
-
- if (negative)
- sig = -sig;
+ s = RSTRING(argv[0])->ptr;
+ if (s[0] == '-') {
+ negative++;
+ s++;
}
+ str_signal:
+ if (strncmp("SIG", s, 3) == 0)
+ s += 3;
+ if((sig = signm2signo(s)) == 0)
+ rb_raise(rb_eArgError, "unsupported name `SIG%s'", s);
+
+ if (negative)
+ sig = -sig;
break;
default:
- rb_raise(rb_eArgError, "bad signal type %s",
- rb_class2name(CLASS_OF(argv[0])));
+ {
+ VALUE str;
+
+ str = rb_check_convert_type(argv[0], T_STRING, "String", "to_str");
+ if (!NIL_P(str)) {
+ s = RSTRING(str)->ptr;
+ goto str_signal;
+ }
+ rb_raise(rb_eArgError, "bad signal type %s",
+ rb_class2name(CLASS_OF(argv[0])));
+ }
break;
}