From: Koji Arai Date: 2000-03-24T06:09:33+09:00 Subject: [ruby-dev:9474] Re: [BUG] trap :symbol, cmd 新井です。 >>> From: Koji Arai >>> Date: Sun, 12 Mar 2000 23:16:58 +0900 >>> Subject: [ruby-dev:9430] [BUG] Process.kill :symbol, pid > 新井です。 > > Process.killに(シグナルとして)Symbolが渡せなくなってます。 もう一個ありました。 $ ruby -v -e 'trap(:EXIT, nil)' ruby 1.5.3 (2000-03-17) [i586-linux] -e:1:in `trap': invalid signal number (8741) (ArgumentError) from -e:1 Fri Mar 24 21:02:11 2000 Koji Arai * signal.c (trap): should treat some symbols as the signal. Index: MANIFEST =================================================================== RCS file: /home/cvs/ruby/MANIFEST,v retrieving revision 1.12 diff -u -p -u -r1.12 MANIFEST --- MANIFEST 2000/03/13 07:18:33 1.12 +++ MANIFEST 2000/03/23 21:01:45 @@ -125,7 +125,6 @@ lib/matrix.rb lib/mkmf.rb lib/monitor.rb lib/mutex_m.rb -lib/net/http.rb lib/net/ftp.rb lib/net/http.rb lib/net/pop.rb =================================================================== ↑これはついで Index: signal.c =================================================================== RCS file: /home/cvs/ruby/signal.c,v retrieving revision 1.7 diff -u -p -u -r1.7 signal.c --- signal.c 2000/03/13 07:18:39 1.7 +++ signal.c 2000/03/23 21:02:11 @@ -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); } -- 新井康司 (Koji Arai)