summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-03-31 02:34:43 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-03-31 02:34:43 +0000
commitd14458fb41dc25592de81ee1dce4997591864871 (patch)
treead3bf99b456ef73fd78ef13250c34ce67d21b3af /signal.c
parent03f0ca4c81dbb3a1f8547f4d174289a477dc5196 (diff)
signal.c: preserve encoding
* signal.c (esignal_init): preserve encoding in error messages. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45483 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/signal.c b/signal.c
index dce4328d88..cdc36b58e6 100644
--- a/signal.c
+++ b/signal.c
@@ -208,6 +208,8 @@ static const struct signals {
{NULL, 0}
};
+static const char signame_prefix[3] = "SIG";
+
static int
signm2signo(const char *nm)
{
@@ -298,11 +300,16 @@ esignal_init(int argc, VALUE *argv, VALUE self)
}
}
else {
+ int len = sizeof(signame_prefix);
signm = SYMBOL_P(sig) ? rb_id2name(SYM2ID(sig)) : StringValuePtr(sig);
- if (strncmp(signm, "SIG", 3) == 0) signm += 3;
+ if (strncmp(signm, signame_prefix, len) == 0) {
+ signm += len;
+ len = 0;
+ }
signo = signm2signo(signm);
if (!signo) {
- rb_raise(rb_eArgError, "unsupported name `SIG%s'", signm);
+ rb_raise(rb_eArgError, "unsupported name `%.*s%"PRIsVALUE"'",
+ len, signame_prefix, sig);
}
sig = rb_sprintf("SIG%s", signm);
}
@@ -409,7 +416,7 @@ rb_f_kill(int argc, VALUE *argv)
negative++;
s++;
}
- if (strncmp("SIG", s, 3) == 0)
+ if (strncmp(signame_prefix, s, sizeof(signame_prefix)) == 0)
s += 3;
if ((sig = signm2signo(s)) == 0)
rb_raise(rb_eArgError, "unsupported name `SIG%s'", s);
@@ -919,7 +926,7 @@ trap_signm(VALUE vsig)
s = StringValuePtr(vsig);
str_signal:
- if (strncmp("SIG", s, 3) == 0)
+ if (strncmp(signame_prefix, s, sizeof(signame_prefix)) == 0)
s += 3;
sig = signm2signo(s);
if (sig == 0 && strcmp(s, "EXIT") != 0)