/* sig2str.c -- convert between signal names and numbers
- Copyright (C) 2002, 2004, 2006, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2006, 2009-2014 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static struct numname { int num; char const name[8]; } numname_table[] =
{
/* Signals required by POSIX 1003.1-2001 base, listed in
- traditional numeric order. */
+ traditional numeric order where possible. */
#ifdef SIGHUP
NUMNAME (HUP),
#endif
#ifdef SIGKILL
NUMNAME (KILL),
#endif
-#ifdef SIGBUS
- NUMNAME (BUS),
-#endif
#ifdef SIGSEGV
NUMNAME (SEGV),
#endif
+ /* On Haiku, SIGSEGV == SIGBUS, but we prefer SIGSEGV to match
+ strsignal.c output, so SIGBUS must be listed second. */
+#ifdef SIGBUS
+ NUMNAME (BUS),
+#endif
#ifdef SIGPIPE
NUMNAME (PIPE),
#endif
- It's typically faster.
POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to
isdigit unless it's important to use the locale's definition
- of `digit' even when the host does not conform to POSIX. */
+ of "digit" even when the host does not conform to POSIX. */
#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
/* Convert the signal name SIGNAME to a signal number. Return the
{
int rtmin = SIGRTMIN;
int rtmax = SIGRTMAX;
+ int base, delta;
if (! (rtmin <= signum && signum <= rtmax))
return -1;
if (signum <= rtmin + (rtmax - rtmin) / 2)
{
- int delta = signum - rtmin;
- sprintf (signame, delta ? "RTMIN+%d" : "RTMIN", delta);
+ strcpy (signame, "RTMIN");
+ base = rtmin;
}
else
{
- int delta = rtmax - signum;
- sprintf (signame, delta ? "RTMAX-%d" : "RTMAX", delta);
+ strcpy (signame, "RTMAX");
+ base = rtmax;
}
+ delta = signum - base;
+ if (delta != 0)
+ sprintf (signame + 5, "%+d", delta);
return 0;
}
}