postgresql/src/port/pgstrsignal.c
Tom Lane c9bd7f4f2b Improve what pg_strsignal prints if we haven't got strsignal(3).
Turns out that returning "unrecognized signal" is confusing.
Make it explicit that the platform lacks any support for signal names.
(At least of the machines in the buildfarm, only HPUX lacks it.)

Back-patch to v12 where we invented this function.

Discussion: https://postgr.es/m/3067.1566870481@sss.pgh.pa.us
2019-08-27 17:24:47 -04:00

65 lines
1.8 KiB
C

/*-------------------------------------------------------------------------
*
* pgstrsignal.c
* Identify a Unix signal number
*
* On platforms compliant with modern POSIX, this just wraps strsignal(3).
* Elsewhere, we do the best we can.
*
* This file is not currently built in MSVC builds, since it's useless
* on non-Unix platforms.
*
* Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* src/port/pgstrsignal.c
*
*-------------------------------------------------------------------------
*/
#include "c.h"
/*
* pg_strsignal
*
* Return a string identifying the given Unix signal number.
*
* The result is declared "const char *" because callers should not
* modify the string. Note, however, that POSIX does not promise that
* the string will remain valid across later calls to strsignal().
*
* This version guarantees to return a non-NULL pointer, although
* some platforms' versions of strsignal() reputedly do not.
*
* Note that the fallback cases just return constant strings such as
* "unrecognized signal". Project style is for callers to print the
* numeric signal value along with the result of this function, so
* there's no need to work harder than that.
*/
const char *
pg_strsignal(int signum)
{
const char *result;
/*
* If we have strsignal(3), use that --- but check its result for NULL.
*/
#ifdef HAVE_STRSIGNAL
result = strsignal(signum);
if (result == NULL)
result = "unrecognized signal";
#else
/*
* We used to have code here to try to use sys_siglist[] if available.
* However, it seems that all platforms with sys_siglist[] have also had
* strsignal() for many years now, so that was just a waste of code.
*/
result = "(signal names not available on this platform)";
#endif
return result;
}