Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #14574 > unrolled thread

[PATCH] decode_signal: allow all sane forms of SIGRTMIN+n

Started byRasmus Villemoes <rv@rasmusvillemoes.dk>
First post2018-09-12 12:11 +0200
Last post2018-09-12 12:11 +0200
Articles 1 — 1 participant

Back to article view | Back to gnu.bash.bug


Contents

  [PATCH] decode_signal: allow all sane forms of SIGRTMIN+n Rasmus Villemoes <rv@rasmusvillemoes.dk> - 2018-09-12 12:11 +0200

#14574 — [PATCH] decode_signal: allow all sane forms of SIGRTMIN+n

FromRasmus Villemoes <rv@rasmusvillemoes.dk>
Date2018-09-12 12:11 +0200
Subject[PATCH] decode_signal: allow all sane forms of SIGRTMIN+n
Message-ID<mailman.670.1536756476.1284.bug-bash@gnu.org>
I have a program I'd like to send SIGRTMIN+20, because that's the
spelling used in its documentation. Currently, bash only accepts the
symbolic names in the signal_names array, meaning I'd have to spell it
SIGRTMAX-10 on linux.

One workaround is of course to use

  kill -n $(($(kill -l SIGRTMIN) + 20)) pid

but it's more user-friendly to allow the form

  kill -s SIGRTMIN+20 pid

For symmetry, also accept SIGRTMAX-n expressions.

Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
---
 trap.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/trap.c b/trap.c
index eb8ecf3a..dd80c220 100644
--- a/trap.c
+++ b/trap.c
@@ -242,6 +242,21 @@ decode_signal (string, flags)
   if (legal_number (string, &sig))
     return ((sig >= 0 && sig < NSIG) ? (int)sig : NO_SIG);
 
+#if defined(SIGRTMIN) && defined(SIGRTMAX)
+  if (STREQN (string, "SIGRTMIN+", 9)) {
+    if (legal_number (string + 9, &sig) && sig >= 0 && sig <= SIGRTMAX - SIGRTMIN)
+      return SIGRTMIN + sig;
+    else
+      return NO_SIG;
+  }
+  if (STREQN (string, "SIGRTMAX-", 9)) {
+    if (legal_number (string + 9, &sig) && sig >= 0 && sig <= SIGRTMAX - SIGRTMIN)
+      return SIGRTMAX - sig;
+    else
+      return NO_SIG;
+  }
+#endif
+
   /* A leading `SIG' may be omitted. */
   for (sig = 0; sig < BASH_NSIG; sig++)
     {
-- 
2.16.4

[toc] | [standalone]


Back to top | Article view | gnu.bash.bug


csiph-web