| 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 | * This file is not currently built in MSVC builds, since it's useless |
| 10 | * on non-Unix platforms. |
| 11 | * |
| 12 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
| 13 | * Portions Copyright (c) 1994, Regents of the University of California |
| 14 | * |
| 15 | * IDENTIFICATION |
| 16 | * src/port/pgstrsignal.c |
| 17 | * |
| 18 | *------------------------------------------------------------------------- |
| 19 | */ |
| 20 | |
| 21 | #include "c.h" |
| 22 | |
| 23 | |
| 24 | /* |
| 25 | * pg_strsignal |
| 26 | * |
| 27 | * Return a string identifying the given Unix signal number. |
| 28 | * |
| 29 | * The result is declared "const char *" because callers should not |
| 30 | * modify the string. Note, however, that POSIX does not promise that |
| 31 | * the string will remain valid across later calls to strsignal(). |
| 32 | * |
| 33 | * This version guarantees to return a non-NULL pointer, although |
| 34 | * some platforms' versions of strsignal() reputedly do not. |
| 35 | * |
| 36 | * Note that the fallback cases just return constant strings such as |
| 37 | * "unrecognized signal". Project style is for callers to print the |
| 38 | * numeric signal value along with the result of this function, so |
| 39 | * there's no need to work harder than that. |
| 40 | */ |
| 41 | const char * |
| 42 | pg_strsignal(int signum) |
| 43 | { |
| 44 | const char *result; |
| 45 | |
| 46 | /* |
| 47 | * If we have strsignal(3), use that --- but check its result for NULL. |
| 48 | */ |
| 49 | #ifdef HAVE_STRSIGNAL |
| 50 | result = strsignal(signum); |
| 51 | if (result == NULL) |
| 52 | result = "unrecognized signal" ; |
| 53 | #else |
| 54 | |
| 55 | /* |
| 56 | * We used to have code here to try to use sys_siglist[] if available. |
| 57 | * However, it seems that all platforms with sys_siglist[] have also had |
| 58 | * strsignal() for many years now, so that was just a waste of code. |
| 59 | */ |
| 60 | result = "(signal names not available on this platform)" ; |
| 61 | #endif |
| 62 | |
| 63 | return result; |
| 64 | } |
| 65 | |