diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-04-10 05:48:43 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-04-10 05:48:43 +0000 |
commit | 620b13d8777086b3b4da0e0a07e93b83ea38b66d (patch) | |
tree | 6dcd08ef584fc777cf34517136d5ce3948840e45 /signal.c | |
parent | 0453f53db62f1321492288d1c904aade9bb0fa3e (diff) | |
download | ruby-620b13d8777086b3b4da0e0a07e93b83ea38b66d.tar.gz ruby-620b13d8777086b3b4da0e0a07e93b83ea38b66d.tar.xz ruby-620b13d8777086b3b4da0e0a07e93b83ea38b66d.zip |
2000-04-10
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@661 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 20 |
1 files changed, 15 insertions, 5 deletions
@@ -429,6 +429,7 @@ trap(arg) RETSIGTYPE (*func)(); VALUE command, old; int sig; + char *s; func = sighandle; command = arg->cmd; @@ -466,18 +467,27 @@ trap(arg) command = 0; } - if (TYPE(arg->sig) == T_STRING) { - char *s = RSTRING(arg->sig)->ptr; + switch (TYPE(arg->sig)) { + case T_FIXNUM: + sig = NUM2INT(arg->sig); + break; + + case T_SYMBOL: + s = rb_id2name(SYM2ID(arg->sig)); + if (!s) rb_raise(rb_eArgError, "bad signal"); + goto str_signal; + + case T_STRING: + s = RSTRING(arg->sig)->ptr; + str_signal: if (strncmp("SIG", s, 3) == 0) s += 3; sig = signm2signo(s); if (sig == 0 && strcmp(s, "EXIT") != 0) rb_raise(rb_eArgError, "invalid signal SIG%s", s); } - else { - sig = NUM2INT(arg->sig); - } + if (sig < 0 || sig > NSIG) { rb_raise(rb_eArgError, "invalid signal number (%d)", sig); } |