Construct a new SignalException object.
sig
should be a known signal name, or a signal number.
static VALUE esignal_init(argc, argv, self) int argc; VALUE *argv; VALUE self; { int argnum = 1; VALUE sig = Qnil; int signo; const char *signm; char tmpnm[(sizeof(int)*CHAR_BIT)/3+4]; if (argc > 0) { sig = argv[0]; if (FIXNUM_P(sig)) argnum = 2; } if (argc < 1 || argnum < argc) { rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, argnum); } if (argnum == 2) { signo = FIX2INT(sig); if (signo < 0 || signo > NSIG) { rb_raise(rb_eArgError, "invalid signal number (%d)", signo); } if (argc > 1) { sig = argv[1]; } else { signm = signo2signm(signo); if (signm) { snprintf(tmpnm, sizeof(tmpnm), "SIG%s", signm); } else { snprintf(tmpnm, sizeof(tmpnm), "SIG%u", signo); } sig = rb_str_new2(signm = tmpnm); } } else { signm = SYMBOL_P(sig) ? rb_id2name(SYM2ID(sig)) : StringValuePtr(sig); if (strncmp(signm, "SIG", 3) == 0) signm += 3; signo = signm2signo(signm); if (!signo) { rb_raise(rb_eArgError, "unsupported name `SIG%s'", signm); } if (SYMBOL_P(sig)) { sig = rb_str_new2(signm); } } rb_call_super(1, &sig); rb_iv_set(self, "signo", INT2NUM(signo)); return self; }