commit c42dec5460fc471946c00a99ea2e04accce9d7c5 Author: KOSAKI Motohiro Date: Thu Nov 8 08:49:16 2012 -0500 signame Signed-off-by: KOSAKI Motohiro diff --git a/signal.c b/signal.c index 304b1e4..c9e3387 100644 --- a/signal.c +++ b/signal.c @@ -207,6 +207,28 @@ signo2signm(int no) return 0; } +/* + * call-seq: + * Signal.signame(signo) -> string + * + * convert signal number to signal name + * + * Signal.trap("INT") { |signo| puts Signal.signame(signo) } + * Process.kill("INT", 0) + * + * produces: + * + * INT + */ +static VALUE +sig_signame(VALUE recv, VALUE signo) +{ + char* signame; + + signame = signo2signm(NUM2INT(signo)); + return rb_str_new_cstr(signame); +} + const char * ruby_signal_name(int no) { @@ -1086,6 +1108,7 @@ Init_signal(void) rb_define_global_function("trap", sig_trap, -1); rb_define_module_function(mSignal, "trap", sig_trap, -1); rb_define_module_function(mSignal, "list", sig_list, 0); + rb_define_module_function(mSignal, "signame", sig_signame, 1); rb_define_method(rb_eSignal, "initialize", esignal_init, -1); rb_define_method(rb_eSignal, "signo", esignal_signo, 0); diff --git a/test/ruby/test_signal.rb b/test/ruby/test_signal.rb index 0e3af06..3d7f64a 100644 --- a/test/ruby/test_signal.rb +++ b/test/ruby/test_signal.rb @@ -240,4 +240,16 @@ EOS } end + def test_signame + 10.times do + caught = 0 + signame = "hoge" + + Signal.trap("INT") { |signo| signame = Signal.signame(signo); caught = 1; } + Process.kill("INT", 0) + + sleep 0.01 while caught==0 + assert_equal(signame, "INT") + end + end end