diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-12-30 01:17:03 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-12-30 01:17:03 +0100 |
commit | 2753aae0e8728f527bedf103b1207857b7c3e151 (patch) | |
tree | 81a721b4e9aa1884e0f25db7e0310b7c6037bc62 | |
parent | 90615a0c5c326fa3cf78fc719f7b16207f47395a (diff) |
libbb: optionally support RTMIN[+n] and RTMAX[-n] signal names
function old new delta
get_signum 140 336 +196
__libc_allocate_rtsig - 56 +56
__libc_current_sigrtmin - 6 +6
__libc_current_sigrtmax - 6 +6
current_rtmin - 4 +4
current_rtmax - 4 +4
bbconfig_config_bz2 4961 4962 +1
------------------------------------------------------------------------------
(add/remove: 6/0 grow/shrink: 2/0 up/down: 273/0) Total: 273 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | libbb/Config.src | 2 | ||||
-rw-r--r-- | libbb/u_signal_names.c | 42 |
2 files changed, 38 insertions, 6 deletions
diff --git a/libbb/Config.src b/libbb/Config.src index f6c7a11ea..85892d3fe 100644 --- a/libbb/Config.src +++ b/libbb/Config.src @@ -135,7 +135,7 @@ config FEATURE_NON_POSIX_CP and create a regular file. This does not conform to POSIX, but prevents a symlink attack. Similarly, "cp file device" will not send file's data - to the device. + to the device. (To do that, use "cat file >device") config FEATURE_VERBOSE_CP_MESSAGE bool "Give more precise messages when copy fails (cp, mv etc)" diff --git a/libbb/u_signal_names.c b/libbb/u_signal_names.c index 9263859f5..53ccdd1a7 100644 --- a/libbb/u_signal_names.c +++ b/libbb/u_signal_names.c @@ -7,6 +7,13 @@ * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ +//config:config FEATURE_RTMINMAX +//config: bool "Support RTMIN[+n] and RTMAX[-n] signal names" +//config: default y +//config: help +//config: Support RTMIN[+n] and RTMAX[-n] signal names +//config: in kill, killall etc. This costs ~250 bytes. + #include "libbb.h" /* Believe it or not, but some arches have more than 32 SIGs! @@ -134,20 +141,45 @@ int FAST_FUNC get_signum(const char *name) if (strcasecmp(name, signals[i]) == 0) return i; -#if ENABLE_DESKTOP && (defined(SIGIOT) || defined(SIGIO)) +#if ENABLE_DESKTOP +# if defined(SIGIOT) || defined(SIGIO) /* SIGIO[T] are aliased to other names, * thus cannot be stored in the signals[] array. * Need special code to recognize them */ if ((name[0] | 0x20) == 'i' && (name[1] | 0x20) == 'o') { -#ifdef SIGIO +# ifdef SIGIO if (!name[2]) return SIGIO; -#endif -#ifdef SIGIOT +# endif +# ifdef SIGIOT if ((name[2] | 0x20) == 't' && !name[3]) return SIGIOT; -#endif +# endif + } +# endif +#endif + +#if ENABLE_FEATURE_RTMINMAX +# if defined(SIGRTMIN) && defined(SIGRTMAX) + if (strncasecmp(name, "RTMAX", 5) == 0) { + if (!name[5]) + return SIGRTMAX; + if (name[5] == '-') { + i = bb_strtou(name + 6, NULL, 10); + if (!errno && i <= SIGRTMAX - SIGRTMIN) + return SIGRTMAX - i; + } + } + if (strncasecmp(name, "RTMIN", 5) == 0) { + if (!name[5]) + return SIGRTMIN; + if (name[5] == '+') { + i = bb_strtou(name + 6, NULL, 10); + if (!errno && i <= SIGRTMAX - SIGRTMIN) + return SIGRTMIN + i; + } } +# endif #endif return -1; |