/src/postgres/src/port/pgstrsignal.c
Line | Count | Source |
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 | | */ |
38 | | const char * |
39 | | pg_strsignal(int signum) |
40 | 0 | { |
41 | 0 | const char *result; |
42 | | |
43 | | /* |
44 | | * If we have strsignal(3), use that --- but check its result for NULL. |
45 | | */ |
46 | 0 | #ifdef HAVE_STRSIGNAL |
47 | 0 | result = strsignal(signum); |
48 | 0 | if (result == NULL) |
49 | 0 | 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 | 0 | return result; |
61 | 0 | } |