chiark / gitweb /
util: make signal_from_string() accept RTMIN, RTMAX, and RTMAX-n
[elogind.git] / src / basic / signal-util.c
index 5bd5c71ceb700464b786ed9df682147e739b3c8e..bf4816fd6d938f599a5d316a7bd849a662b42cd2 100644 (file)
@@ -234,7 +234,11 @@ int signal_from_string(const char *s) {
         const char *p;
         int signo, r;
 
-        /* Check that the input is a signal number. */
+        /* Check that the input is a signal name. */
+        signo = __signal_from_string(s);
+        if (signo > 0)
+                return signo;
+
         if (safe_atoi(s, &signo) >= 0) {
                 if (SIGNAL_VALID(signo))
                         return signo;
@@ -242,15 +246,6 @@ 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");
@@ -292,6 +287,17 @@ 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) {