PostgreSQL Source Code: src/port/pgstrsignal.c Source File (original) (raw)

1/*-------------------------------------------------------------------------

2 *

3 * pgstrsignal.c

4 * Identify a Unix signal number

5 *

6 * On platforms compliant with modern POSIX, this just wraps strsignal(3).

7 * Elsewhere, we do the best we can.

8 *

9 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group

10 * Portions Copyright (c) 1994, Regents of the University of California

11 *

12 * IDENTIFICATION

13 * src/port/pgstrsignal.c

14 *

15 *-------------------------------------------------------------------------

16 */

17

18#include "c.h"

19

20

21/*

22 * pg_strsignal

23 *

24 * Return a string identifying the given Unix signal number.

25 *

26 * The result is declared "const char *" because callers should not

27 * modify the string. Note, however, that POSIX does not promise that

28 * the string will remain valid across later calls to strsignal().

29 *

30 * This version guarantees to return a non-NULL pointer, although

31 * some platforms' versions of strsignal() reputedly do not.

32 *

33 * Note that the fallback cases just return constant strings such as

34 * "unrecognized signal". Project style is for callers to print the

35 * numeric signal value along with the result of this function, so

36 * there's no need to work harder than that.

37 */

38const char *

40{

41 const char *result;

42

43 /*

44 * If we have strsignal(3), use that --- but check its result for NULL.

45 */

46#ifdef HAVE_STRSIGNAL

47 result = strsignal(signum);

48 if (result == NULL)

49 result = "unrecognized signal";

50#else

51

52 /*

53 * We used to have code here to try to use sys_siglist[] if available.

54 * However, it seems that all platforms with sys_siglist[] have also had

55 * strsignal() for many years now, so that was just a waste of code.

56 */

57 result = "(signal names not available on this platform)";

58#endif

59

60 return result;

61}

const char * pg_strsignal(int signum)