From 8ccaeff610de044652215a9415b5b0224bdfc451 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 3 May 2018 16:38:57 +0900 Subject: [PATCH] util: rename signal_from_string_try_harder() to signal_from_string() Also this makes the new `signal_from_string()` function reject e.g, `SIG3` or `SIG+5`. --- src/basic/signal-util.c | 26 ++++++++++---------------- src/basic/signal-util.h | 2 -- src/login/loginctl.c | 2 +- src/shared/conf-parser.c | 2 +- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/basic/signal-util.c b/src/basic/signal-util.c index bf4816fd6..5bd5c71ce 100644 --- a/src/basic/signal-util.c +++ b/src/basic/signal-util.c @@ -234,11 +234,7 @@ int signal_from_string(const char *s) { const char *p; int signo, r; - /* Check that the input is a signal name. */ - signo = __signal_from_string(s); - if (signo > 0) - return signo; - + /* Check that the input is a signal number. */ if (safe_atoi(s, &signo) >= 0) { if (SIGNAL_VALID(signo)) return signo; @@ -246,6 +242,15 @@ int signal_from_string(const char *s) { return -ERANGE; } + /* Drop "SIG" prefix. */ + if (startswith(s, "SIG")) + s += 3; + + /* Check that the input is a signal name. */ + signo = __signal_from_string(s); + if (signo > 0) + return signo; + /* Check that the input is RTMIN or * RTMIN+n (0 <= n <= SIGRTMAX-SIGRTMIN). */ p = startswith(s, "RTMIN"); @@ -287,17 +292,6 @@ int signal_from_string(const char *s) { return -EINVAL; } -int signal_from_string_try_harder(const char *s) { - int signo; - assert(s); - - signo = signal_from_string(s); - if (signo <= 0) - if (startswith(s, "SIG")) - return signal_from_string(s+3); - - return signo; -} #if 0 /// UNNEEDED by elogind void nop_signal_handler(int sig) { diff --git a/src/basic/signal-util.h b/src/basic/signal-util.h index daf8f404d..a52b1d2fa 100644 --- a/src/basic/signal-util.h +++ b/src/basic/signal-util.h @@ -26,9 +26,7 @@ int sigprocmask_many(int how, sigset_t *old, ...); const char *signal_to_string(int i) _const_; int signal_from_string(const char *s) _pure_; -int signal_from_string_try_harder(const char *s); #if 0 /// UNNEEDED by elogind - void nop_signal_handler(int sig); #endif // 0 diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 0c984f9eb..9badf8e68 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -1546,7 +1546,7 @@ static int parse_argv(int argc, char *argv[]) { break; case 's': - arg_signal = signal_from_string_try_harder(optarg); + arg_signal = signal_from_string(optarg); if (arg_signal < 0) { log_error("Failed to parse signal string %s.", optarg); return -EINVAL; diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 6c3dda5ae..704c75c3a 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -943,7 +943,7 @@ int config_parse_signal( assert(rvalue); assert(sig); - r = signal_from_string_try_harder(rvalue); + r = signal_from_string(rvalue); if (r <= 0) { log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse signal name, ignoring: %s", rvalue); return 0; -- 2.30.2