From 5df425867cd992ccadbe8b5cf713404fd53db7df Mon Sep 17 00:00:00 2001 From: Hisham Date: Fri, 16 Sep 2016 13:37:07 -0300 Subject: Protect against strange values of SIGRTMIN and SIGRTMAX, and change alignment of numbers. --- SignalsPanel.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'SignalsPanel.c') diff --git a/SignalsPanel.c b/SignalsPanel.c index 22fefa62..34fef4b5 100644 --- a/SignalsPanel.c +++ b/SignalsPanel.c @@ -40,25 +40,16 @@ Panel* SignalsPanel_new() { } } #if (defined(SIGRTMIN) && defined(SIGRTMAX)) - // Real-time signals. - // SIGRTMIN and SIGRTMAX expand to libc internal functions and we have to - // grab their numbers at runtime. - static char buf[15]; // 15 == sizeof("xx SIGRTMIN+nn") - int rtmax; - for (int sig = SIGRTMIN; sig <= (rtmax = SIGRTMAX); i++, sig++) { - // Every signal between SIGRTMIN and SIGRTMAX are denoted in "SIGRTMIN+n" - // notation. This matches glibc's strsignal(3) behavior. - // We deviate from behaviors of Bash, ksh and Solaris intentionally. - if (sig == rtmax) { - snprintf(buf, 15, "%2d SIGRTMAX", sig); - } else { + if (SIGRTMAX - SIGRTMIN <= 100) { + static char buf[15]; + for (int sig = SIGRTMIN; sig <= SIGRTMAX; i++, sig++) { int n = sig - SIGRTMIN; - snprintf(buf, 15, "%2d SIGRTMIN%+d", sig, n); + snprintf(buf, 15, "%2d SIGRTMIN%-+3d", sig, n); if (n == 0) { buf[11] = '\0'; } + Panel_set(this, i, (Object*) ListItem_new(buf, sig)); } - Panel_set(this, i, (Object*) ListItem_new(buf, sig)); } #endif Panel_setHeader(this, "Send signal:"); -- cgit v1.2.3