diff --git a/ChangeLog b/ChangeLog index 2ae051a215..8e85676791 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Mar 2 13:04:27 2015 Nobuyoshi Nakada + + * signal.c (sig_signame): return nil if the argument is a valid + signal number. + Mon Mar 2 12:05:04 2015 Naohisa Goto * test/net/ftp/test_ftp.rb (create_ftp_server): set SO_OOBINLINE diff --git a/signal.c b/signal.c index fcfed8d42e..53e77d9ca4 100644 --- a/signal.c +++ b/signal.c @@ -257,6 +257,7 @@ static VALUE sig_signame(VALUE recv, VALUE signo) { const char *signame = signo2signm(NUM2INT(signo)); + if (!signame) return Qnil; return rb_str_new_cstr(signame); } diff --git a/test/ruby/test_signal.rb b/test/ruby/test_signal.rb index 4a59aa66c8..781045d30a 100644 --- a/test/ruby/test_signal.rb +++ b/test/ruby/test_signal.rb @@ -218,6 +218,15 @@ class TestSignal < Test::Unit::TestCase end def test_signame + Signal.list.each do |name, num| + assert_equal(num, Signal.list[Signal.signame(num)], name) + end + assert_nil(Signal.signame(-1)) + signums = Signal.list.invert + assert_nil(Signal.signame((1..1000).find {|num| !signums[num]})) + end + + def test_signame_delivered 10.times do IO.popen([EnvUtil.rubybin, "-e", < File::NULL]) do |child| Signal.trap("INT") do |signo|