Coverage Report

Created: 2026-01-02 06:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/pacemaker/include/crm/common/results.h
Line
Count
Source
1
/*
2
 * Copyright 2012-2025 the Pacemaker project contributors
3
 *
4
 * The version control history for this file may have further details.
5
 *
6
 * This source code is licensed under the GNU Lesser General Public License
7
 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8
 */
9
#ifndef PCMK__CRM_COMMON_RESULTS__H
10
#define PCMK__CRM_COMMON_RESULTS__H
11
12
#include <glib.h>           // gboolean
13
14
#ifdef __cplusplus
15
extern "C" {
16
#endif
17
18
/*!
19
 * \file
20
 * \brief Function and executable result codes
21
 * \ingroup core
22
 */
23
24
// Lifted from config.h
25
/* The _Noreturn keyword of C11.  */
26
#ifndef _Noreturn
27
# if (defined __cplusplus \
28
      && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
29
          || (defined _MSC_VER && 1900 <= _MSC_VER)))
30
#  define _Noreturn [[noreturn]]
31
# elif ((!defined __cplusplus || defined __clang__) \
32
        && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0)  \
33
            || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)))
34
   /* _Noreturn works as-is.  */
35
# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C
36
#  define _Noreturn __attribute__ ((__noreturn__))
37
# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
38
#  define _Noreturn __declspec (noreturn)
39
# else
40
#  define _Noreturn
41
# endif
42
#endif
43
44
/*
45
 * Function return codes
46
 *
47
 * Most Pacemaker API functions return an integer return code. There are two
48
 * alternative interpretations. The legacy interpration is that the absolute
49
 * value of the return code is either a system error number or a custom
50
 * pcmk_err_* number. This is less than ideal because system error numbers are
51
 * constrained only to the positive int range, so there's the possibility that
52
 * system errors and custom errors could collide (which did in fact happen
53
 * already on one architecture). The new intepretation is that negative values
54
 * are from the pcmk_rc_e enum, and positive values are system error numbers.
55
 * Both use 0 for success.
56
 *
57
 * For system error codes, see:
58
 * - /usr/include/asm-generic/errno.h
59
 * - /usr/include/asm-generic/errno-base.h
60
 */
61
62
// Legacy custom return codes for Pacemaker API functions (deprecated)
63
64
// NOTE: sbd (as of at least 1.5.2) uses this
65
46
#define pcmk_ok                       0
66
67
#define PCMK_ERROR_OFFSET             190    /* Replacements on non-linux systems, see include/portability.h */
68
#define PCMK_CUSTOM_OFFSET            200    /* Purely custom codes */
69
0
#define pcmk_err_generic              201
70
0
#define pcmk_err_no_quorum            202
71
0
#define pcmk_err_schema_validation    203
72
0
#define pcmk_err_transform_failed     204
73
0
#define pcmk_err_old_data             205
74
75
// NOTE: sbd (as of at least 1.5.2) uses this
76
0
#define pcmk_err_diff_failed          206
77
78
// NOTE: sbd (as of at least 1.5.2) uses this
79
0
#define pcmk_err_diff_resync          207
80
81
0
#define pcmk_err_cib_modified         208
82
0
#define pcmk_err_cib_backup           209
83
0
#define pcmk_err_cib_save             210
84
0
#define pcmk_err_schema_unchanged     211
85
0
#define pcmk_err_cib_corrupt          212
86
0
#define pcmk_err_multiple             213
87
0
#define pcmk_err_node_unknown         214
88
0
#define pcmk_err_already              215
89
/* On HPPA 215 is ENOSYM (Unknown error 215), which hopefully never happens. */
90
#ifdef __hppa__
91
#define pcmk_err_bad_nvpair           250 /* 216 is ENOTSOCK */
92
#define pcmk_err_unknown_format       252 /* 217 is EDESTADDRREQ */
93
#else
94
0
#define pcmk_err_bad_nvpair           216
95
0
#define pcmk_err_unknown_format       217
96
#endif
97
98
/*!
99
 * \brief Return codes for Pacemaker API functions
100
 *
101
 * Any Pacemaker API function documented as returning a "standard Pacemaker
102
 * return code" will return pcmk_rc_ok (0) on success, and one of this
103
 * enumeration's other (negative) values or a (positive) system error number
104
 * otherwise. The custom codes are at -1001 and lower, so that the caller may
105
 * use -1 through -1000 for their own custom values if desired. While generally
106
 * referred to as "errors", nonzero values simply indicate a result, which might
107
 * or might not be an error depending on the calling context.
108
 */
109
enum pcmk_rc_e {
110
    /* When adding new values, use consecutively lower numbers, update the array
111
     * in lib/common/results.c, and test with crm_error.
112
     */
113
    pcmk_rc_digest_mismatch     = -1043,
114
    pcmk_rc_cs_internal         = -1042,
115
    pcmk_rc_ipc_more            = -1041,
116
    pcmk_rc_no_dc               = -1040,
117
    pcmk_rc_compression         = -1039,
118
    pcmk_rc_ns_resolution       = -1038,
119
    pcmk_rc_no_transaction      = -1037,
120
    pcmk_rc_bad_xml_patch       = -1036,
121
    pcmk_rc_bad_input           = -1035,
122
    pcmk_rc_disabled            = -1034,
123
    pcmk_rc_duplicate_id        = -1033,
124
    pcmk_rc_unpack_error        = -1032,
125
    pcmk_rc_invalid_transition  = -1031,
126
    pcmk_rc_graph_error         = -1030,
127
    pcmk_rc_dot_error           = -1029,
128
    pcmk_rc_underflow           = -1028,
129
    pcmk_rc_no_input            = -1027,
130
    pcmk_rc_no_output           = -1026,
131
    pcmk_rc_after_range         = -1025,
132
    pcmk_rc_within_range        = -1024,
133
    pcmk_rc_before_range        = -1023,
134
    pcmk_rc_undetermined        = -1022,
135
    pcmk_rc_op_unsatisfied      = -1021,
136
    pcmk_rc_ipc_pid_only        = -1020,
137
    pcmk_rc_ipc_unresponsive    = -1019,
138
    pcmk_rc_ipc_unauthorized    = -1018,
139
    pcmk_rc_no_quorum           = -1017,
140
    pcmk_rc_schema_validation   = -1016,
141
    pcmk_rc_schema_unchanged    = -1015,
142
    pcmk_rc_transform_failed    = -1014,
143
    pcmk_rc_old_data            = -1013,
144
    pcmk_rc_diff_failed         = -1012,
145
    pcmk_rc_diff_resync         = -1011,
146
    pcmk_rc_cib_modified        = -1010,
147
    pcmk_rc_cib_backup          = -1009,
148
    pcmk_rc_cib_save            = -1008,
149
    pcmk_rc_cib_corrupt         = -1007,
150
    pcmk_rc_multiple            = -1006,
151
    pcmk_rc_node_unknown        = -1005,
152
    pcmk_rc_already             = -1004,
153
    pcmk_rc_bad_nvpair          = -1003,
154
    pcmk_rc_unknown_format      = -1002,
155
    // Developers: Use a more specific code than pcmk_rc_error whenever possible
156
    pcmk_rc_error               = -1001,
157
158
    // Values -1 through -1000 reserved for caller use
159
160
    // NOTE: sbd (as of at least 1.5.2) uses this
161
    pcmk_rc_ok                  =     0
162
163
    // Positive values reserved for system error numbers
164
};
165
166
167
/*!
168
 * \brief Exit status codes for resource agents
169
 *
170
 * The OCF Resource Agent API standard enumerates the possible exit status codes
171
 * that agents should return. Besides being used with OCF agents, these values
172
 * are also used by the executor as a universal status for all agent standards;
173
 * actual results are mapped to these before returning them to clients.
174
 */
175
enum ocf_exitcode {
176
    PCMK_OCF_OK                   = 0,   //!< Success
177
178
    // NOTE: booth (as of at least 1.1) uses this value
179
    PCMK_OCF_UNKNOWN_ERROR        = 1,   //!< Unspecified error
180
181
    PCMK_OCF_INVALID_PARAM        = 2,   //!< Parameter invalid (in local context)
182
    PCMK_OCF_UNIMPLEMENT_FEATURE  = 3,   //!< Requested action not implemented
183
    PCMK_OCF_INSUFFICIENT_PRIV    = 4,   //!< Insufficient privileges
184
    PCMK_OCF_NOT_INSTALLED        = 5,   //!< Dependencies not available locally
185
    PCMK_OCF_NOT_CONFIGURED       = 6,   //!< Parameter invalid (inherently)
186
187
    // NOTE: booth (as of at least 1.1) uses this value
188
    PCMK_OCF_NOT_RUNNING          = 7,   //!< Service safely stopped
189
190
    PCMK_OCF_RUNNING_PROMOTED     = 8,   //!< Service active and promoted
191
    PCMK_OCF_FAILED_PROMOTED      = 9,   //!< Service failed and possibly in promoted role
192
    PCMK_OCF_DEGRADED             = 190, //!< Service active but more likely to fail soon
193
    PCMK_OCF_DEGRADED_PROMOTED    = 191, //!< Service promoted but more likely to fail soon
194
195
    /* These two are Pacemaker extensions, not in the OCF standard. The
196
     * controller records PCMK_OCF_UNKNOWN for pending actions.
197
     * PCMK_OCF_CONNECTION_DIED is used only with older DCs that don't support
198
     * PCMK_EXEC_NOT_CONNECTED.
199
     */
200
    PCMK_OCF_CONNECTION_DIED      = 189, //!< \deprecated See PCMK_EXEC_NOT_CONNECTED
201
    PCMK_OCF_UNKNOWN              = 193, //!< Action is pending
202
};
203
204
// NOTE: sbd (as of at least 1.5.2) uses this
205
/*!
206
 * \brief Exit status codes for tools and daemons
207
 *
208
 * We want well-specified (i.e. OS-invariant) exit status codes for our daemons
209
 * and applications so they can be relied on by callers. (Function return codes
210
 * and errno's do not make good exit statuses.)
211
 *
212
 * The only hard rule is that exit statuses must be between 0 and 255; all else
213
 * is convention. Universally, 0 is success, and 1 is generic error (excluding
214
 * OSes we don't support -- for example, OpenVMS considers 1 success!).
215
 *
216
 * For init scripts, the LSB gives meaning to 0-7, and sets aside 150-199 for
217
 * application use. OCF adds 8-9 and 190-191.
218
 *
219
 * sysexits.h was an attempt to give additional meanings, but never really
220
 * caught on. It uses 0 and 64-78.
221
 *
222
 * Bash reserves 2 ("incorrect builtin usage") and 126-255 (126 is "command
223
 * found but not executable", 127 is "command not found", 128 + n is
224
 * "interrupted by signal n").
225
 *
226
 * tldp.org recommends 64-113 for application use.
227
 *
228
 * We try to overlap with the above conventions when practical.
229
 *
230
 * NOTE: When new exit codes are added here, remember to also update
231
 * python/pacemaker/exitstatus.py.
232
 */
233
typedef enum crm_exit_e {
234
    // Common convention
235
    CRM_EX_OK                   =   0, //!< Success
236
    CRM_EX_ERROR                =   1, //!< Unspecified error
237
238
    // LSB + OCF
239
    CRM_EX_INVALID_PARAM        =   2, //!< Parameter invalid (in local context)
240
    CRM_EX_UNIMPLEMENT_FEATURE  =   3, //!< Requested action not implemented
241
    CRM_EX_INSUFFICIENT_PRIV    =   4, //!< Insufficient privileges
242
    CRM_EX_NOT_INSTALLED        =   5, //!< Dependencies not available locally
243
    CRM_EX_NOT_CONFIGURED       =   6, //!< Parameter invalid (inherently)
244
    CRM_EX_NOT_RUNNING          =   7, //!< Service safely stopped
245
    CRM_EX_PROMOTED             =   8, //!< Service active and promoted
246
    CRM_EX_FAILED_PROMOTED      =   9, //!< Service failed and possibly promoted
247
248
    // sysexits.h
249
    CRM_EX_USAGE                =  64, //!< Command line usage error
250
    CRM_EX_DATAERR              =  65, //!< User-supplied data incorrect
251
    CRM_EX_NOINPUT              =  66, //!< Input file not available
252
    CRM_EX_NOUSER               =  67, //!< User does not exist
253
    CRM_EX_NOHOST               =  68, //!< Host unknown
254
    CRM_EX_UNAVAILABLE          =  69, //!< Needed service unavailable
255
    CRM_EX_SOFTWARE             =  70, //!< Internal software bug
256
    CRM_EX_OSERR                =  71, //!< External (OS/environmental) problem
257
    CRM_EX_OSFILE               =  72, //!< System file not usable
258
    CRM_EX_CANTCREAT            =  73, //!< File couldn't be created
259
    CRM_EX_IOERR                =  74, //!< File I/O error
260
    CRM_EX_TEMPFAIL             =  75, //!< Try again
261
    CRM_EX_PROTOCOL             =  76, //!< Protocol violated
262
    CRM_EX_NOPERM               =  77, //!< Non-file permission issue
263
    CRM_EX_CONFIG               =  78, //!< Misconfiguration
264
265
    // Custom
266
    CRM_EX_FATAL                = 100, //!< Do not respawn
267
    CRM_EX_PANIC                = 101, //!< Panic the local host
268
    CRM_EX_DISCONNECT           = 102, //!< Lost connection to something
269
    CRM_EX_OLD                  = 103, //!< Update older than existing config
270
    CRM_EX_DIGEST               = 104, //!< Digest comparison failed
271
    CRM_EX_NOSUCH               = 105, //!< Requested item does not exist
272
    CRM_EX_QUORUM               = 106, //!< Local partition does not have quorum
273
    CRM_EX_UNSAFE               = 107, //!< Requires --force or new conditions
274
    CRM_EX_EXISTS               = 108, //!< Requested item already exists
275
    CRM_EX_MULTIPLE             = 109, //!< Requested item has multiple matches
276
    CRM_EX_EXPIRED              = 110, //!< Requested item has expired
277
    CRM_EX_NOT_YET_IN_EFFECT    = 111, //!< Requested item is not in effect
278
    CRM_EX_INDETERMINATE        = 112, //!< Could not determine status
279
    CRM_EX_UNSATISFIED          = 113, //!< Requested item does not satisfy constraints
280
    CRM_EX_NO_DC                = 114, //!< DC is not yet elected, e.g. right after cluster restart
281
282
    // Other
283
    CRM_EX_TIMEOUT              = 124, //!< Convention from timeout(1)
284
285
    /* Anything above 128 overlaps with some shells' use of these values for
286
     * "interrupted by signal N", and so may be unreliable when detected by
287
     * shell scripts.
288
     */
289
290
    // OCF Resource Agent API 1.1
291
    CRM_EX_DEGRADED             = 190, //!< Service active but more likely to fail soon
292
    CRM_EX_DEGRADED_PROMOTED    = 191, //!< Service promoted but more likely to fail soon
293
294
    /* Custom
295
     *
296
     * This can be used to initialize exit status variables or to indicate that
297
     * a command is pending (which is what the controller uses it for).
298
     */
299
    CRM_EX_NONE                 = 193, //!< No exit status available
300
301
    CRM_EX_MAX                  = 255, //!< Ensure crm_exit_t can hold this
302
} crm_exit_t;
303
304
/*!
305
 * \brief Execution status
306
 *
307
 * These codes are used to specify the result of the attempt to execute an
308
 * agent, rather than the agent's result itself.
309
 */
310
enum pcmk_exec_status {
311
    PCMK_EXEC_UNKNOWN = -2,     //!< Used only to initialize variables
312
    PCMK_EXEC_PENDING = -1,     //!< Action is in progress
313
    PCMK_EXEC_DONE,             //!< Action completed, result is known
314
    PCMK_EXEC_CANCELLED,        //!< Action was cancelled
315
    PCMK_EXEC_TIMEOUT,          //!< Action did not complete in time
316
    PCMK_EXEC_NOT_SUPPORTED,    //!< Agent does not implement requested action
317
    PCMK_EXEC_ERROR,            //!< Execution failed, may be retried
318
    PCMK_EXEC_ERROR_HARD,       //!< Execution failed, do not retry on node
319
    PCMK_EXEC_ERROR_FATAL,      //!< Execution failed, do not retry anywhere
320
    PCMK_EXEC_NOT_INSTALLED,    //!< Agent or dependency not available locally
321
    PCMK_EXEC_NOT_CONNECTED,    //!< No connection to executor
322
    PCMK_EXEC_INVALID,          //!< Action cannot be attempted (e.g. shutdown)
323
    PCMK_EXEC_NO_FENCE_DEVICE,  //!< No fence device is configured for target
324
    PCMK_EXEC_NO_SECRETS,       //!< Necessary CIB secrets are unavailable
325
326
    // Add new values above here then update this one below
327
    PCMK_EXEC_MAX = PCMK_EXEC_NO_SECRETS, //!< Maximum value for this enum
328
};
329
330
/*!
331
 * \brief Types of Pacemaker result codes
332
 *
333
 * A particular integer can have different meanings within different Pacemaker
334
 * result code families. It may be interpretable within zero, one, or multiple
335
 * families.
336
 *
337
 * These values are useful for specifying how an integer result code should be
338
 * interpreted in situations involving a generic integer value. For example, a
339
 * function that can process multiple types of result codes might accept an
340
 * arbitrary integer argument along with a \p pcmk_result_type argument that
341
 * specifies how to interpret the integer.
342
 */
343
enum pcmk_result_type {
344
    pcmk_result_legacy      = 0,  //!< Legacy API function return code
345
    pcmk_result_rc          = 1,  //!< Standard Pacemaker return code
346
    pcmk_result_exitcode    = 2,  //!< Exit status code
347
    pcmk_result_exec_status = 3,  //!< Execution status
348
};
349
350
int pcmk_result_get_strings(int code, enum pcmk_result_type type,
351
                            const char **name, const char **desc);
352
const char *pcmk_rc_name(int rc);
353
354
// NOTE: sbd (as of at least 1.5.2) uses this
355
const char *pcmk_rc_str(int rc);
356
357
crm_exit_t pcmk_rc2exitc(int rc);
358
enum ocf_exitcode pcmk_rc2ocf(int rc);
359
int pcmk_rc2legacy(int rc);
360
int pcmk_legacy2rc(int legacy_rc);
361
362
// NOTE: sbd (as of at least 1.5.2) uses this
363
const char *pcmk_strerror(int rc);
364
365
const char *pcmk_errorname(int rc);
366
const char *crm_exit_name(crm_exit_t exit_code);
367
368
// NOTE: sbd (as of at least 1.5.2) uses this
369
const char *crm_exit_str(crm_exit_t exit_code);
370
371
_Noreturn crm_exit_t crm_exit(crm_exit_t rc);
372
373
/* coverity[+kill] */
374
void crm_abort(const char *file, const char *function, int line,
375
               const char *condition, gboolean do_core, gboolean do_fork);
376
377
static inline const char *
378
pcmk_exec_status_str(enum pcmk_exec_status status)
379
0
{
380
0
    switch (status) {
381
0
        case PCMK_EXEC_PENDING:         return "Pending";
382
0
        case PCMK_EXEC_DONE:            return "Done";
383
0
        case PCMK_EXEC_CANCELLED:       return "Cancelled";
384
0
        case PCMK_EXEC_TIMEOUT:         return "Timed out";
385
0
        case PCMK_EXEC_NOT_SUPPORTED:   return "Unsupported";
386
0
        case PCMK_EXEC_ERROR:           return "Error";
387
0
        case PCMK_EXEC_ERROR_HARD:      return "Hard error";
388
0
        case PCMK_EXEC_ERROR_FATAL:     return "Fatal error";
389
0
        case PCMK_EXEC_NOT_INSTALLED:   return "Not installed";
390
0
        case PCMK_EXEC_NOT_CONNECTED:   return "Internal communication failure";
391
0
        case PCMK_EXEC_INVALID:         return "Cannot execute now";
392
0
        case PCMK_EXEC_NO_FENCE_DEVICE: return "No fence device";
393
0
        case PCMK_EXEC_NO_SECRETS:      return "CIB secrets unavailable";
394
0
        default:                        return "Unrecognized status (bug?)";
395
0
    }
396
0
}
Unexecuted instantiation: scores_fuzzer.c:pcmk_exec_status_str
Unexecuted instantiation: results.c:pcmk_exec_status_str
Unexecuted instantiation: scores.c:pcmk_exec_status_str
Unexecuted instantiation: strings.c:pcmk_exec_status_str
Unexecuted instantiation: utils.c:pcmk_exec_status_str
Unexecuted instantiation: iso8601.c:pcmk_exec_status_str
Unexecuted instantiation: logging.c:pcmk_exec_status_str
Unexecuted instantiation: mainloop.c:pcmk_exec_status_str
Unexecuted instantiation: options.c:pcmk_exec_status_str
Unexecuted instantiation: output.c:pcmk_exec_status_str
Unexecuted instantiation: output_log.c:pcmk_exec_status_str
Unexecuted instantiation: output_text.c:pcmk_exec_status_str
Unexecuted instantiation: output_xml.c:pcmk_exec_status_str
Unexecuted instantiation: patchset_display.c:pcmk_exec_status_str
Unexecuted instantiation: schemas.c:pcmk_exec_status_str
Unexecuted instantiation: xml.c:pcmk_exec_status_str
Unexecuted instantiation: xml_attr.c:pcmk_exec_status_str
Unexecuted instantiation: xml_comment.c:pcmk_exec_status_str
Unexecuted instantiation: xml_display.c:pcmk_exec_status_str
Unexecuted instantiation: xml_element.c:pcmk_exec_status_str
Unexecuted instantiation: xml_idref.c:pcmk_exec_status_str
Unexecuted instantiation: xml_io.c:pcmk_exec_status_str
Unexecuted instantiation: xpath.c:pcmk_exec_status_str
Unexecuted instantiation: acl.c:pcmk_exec_status_str
Unexecuted instantiation: actions.c:pcmk_exec_status_str
Unexecuted instantiation: agents.c:pcmk_exec_status_str
Unexecuted instantiation: cmdline.c:pcmk_exec_status_str
Unexecuted instantiation: digest.c:pcmk_exec_status_str
Unexecuted instantiation: health.c:pcmk_exec_status_str
Unexecuted instantiation: io.c:pcmk_exec_status_str
Unexecuted instantiation: ipc_client.c:pcmk_exec_status_str
Unexecuted instantiation: ipc_common.c:pcmk_exec_status_str
Unexecuted instantiation: ipc_controld.c:pcmk_exec_status_str
Unexecuted instantiation: ipc_pacemakerd.c:pcmk_exec_status_str
Unexecuted instantiation: ipc_schedulerd.c:pcmk_exec_status_str
Unexecuted instantiation: ipc_server.c:pcmk_exec_status_str
Unexecuted instantiation: messages.c:pcmk_exec_status_str
Unexecuted instantiation: nodes.c:pcmk_exec_status_str
Unexecuted instantiation: nvpair.c:pcmk_exec_status_str
Unexecuted instantiation: options_display.c:pcmk_exec_status_str
Unexecuted instantiation: patchset.c:pcmk_exec_status_str
Unexecuted instantiation: procfs.c:pcmk_exec_status_str
Unexecuted instantiation: rules.c:pcmk_exec_status_str
Unexecuted instantiation: servers.c:pcmk_exec_status_str
Unexecuted instantiation: cib.c:pcmk_exec_status_str
Unexecuted instantiation: ipc_attrd.c:pcmk_exec_status_str
Unexecuted instantiation: pid.c:pcmk_exec_status_str
Unexecuted instantiation: attrs.c:pcmk_exec_status_str
Unexecuted instantiation: strings_fuzzer.c:pcmk_exec_status_str
Unexecuted instantiation: cib_file_fuzzer.c:pcmk_exec_status_str
Unexecuted instantiation: cib_client.c:pcmk_exec_status_str
Unexecuted instantiation: cib_file.c:pcmk_exec_status_str
Unexecuted instantiation: cib_native.c:pcmk_exec_status_str
Unexecuted instantiation: cib_ops.c:pcmk_exec_status_str
Unexecuted instantiation: cib_remote.c:pcmk_exec_status_str
Unexecuted instantiation: cib_utils.c:pcmk_exec_status_str
Unexecuted instantiation: remote.c:pcmk_exec_status_str
Unexecuted instantiation: tls.c:pcmk_exec_status_str
Unexecuted instantiation: watchdog.c:pcmk_exec_status_str
Unexecuted instantiation: iso8601_fuzzer.c:pcmk_exec_status_str
397
398
#ifdef __cplusplus
399
}
400
#endif
401
402
#if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
403
#include <crm/common/results_compat.h>
404
#endif
405
406
#endif