pacemaker  2.1.8-3980678f03
Scalable High-Availability cluster resource manager
results_internal.h
Go to the documentation of this file.
1 /*
2  * Copyright 2020-2024 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 
10 #ifndef PCMK__COMMON_RESULTS_INTERNAL__H
11 #define PCMK__COMMON_RESULTS_INTERNAL__H
12 
13 #include <glib.h> // GQuark
14 
15 extern const size_t pcmk__n_rc;
16 
17 int pcmk__result_bounds(enum pcmk_result_type, int *lower, int *upper);
18 
28 #define pcmk__mem_assert(ptr) do { \
29  if ((ptr) == NULL) { \
30  crm_abort(__FILE__, __func__, __LINE__, "Out of memory", FALSE, \
31  TRUE); \
32  crm_exit(CRM_EX_OSERR); \
33  } \
34  } while (0)
35 
36 /* Error domains for use with g_set_error */
37 
38 GQuark pcmk__rc_error_quark(void);
39 GQuark pcmk__exitc_error_quark(void);
40 
41 #define PCMK__RC_ERROR pcmk__rc_error_quark()
42 #define PCMK__EXITC_ERROR pcmk__exitc_error_quark()
43 
44 /* Action results */
45 
46 typedef struct {
47  int exit_status; // Child exit status
48  enum pcmk_exec_status execution_status; // Execution status
49  char *exit_reason; // Brief, human-friendly explanation
50  char *action_stdout; // Action output
51  char *action_stderr; // Action error output
53 
61 #define PCMK__UNKNOWN_RESULT { \
62  .exit_status = CRM_EX_OK, \
63  .execution_status = PCMK_EXEC_UNKNOWN, \
64  .exit_reason = NULL, \
65  .action_stdout = NULL, \
66  .action_stderr = NULL, \
67  }
68 
69 void pcmk__set_result(pcmk__action_result_t *result, int exit_status,
70  enum pcmk_exec_status exec_status,
71  const char *exit_reason);
72 
73 void pcmk__format_result(pcmk__action_result_t *result, int exit_status,
74  enum pcmk_exec_status exec_status,
75  const char *format, ...) G_GNUC_PRINTF(4, 5);
76 
78  char *out, char *err);
79 
81 
84 
85 int pcmk__gaierror2rc(int gai);
86 int pcmk__bzlib2rc(int bz2);
87 
97 static inline bool
98 pcmk__result_ok(const pcmk__action_result_t *result)
99 {
100  return (result != NULL) && (result->exit_status == CRM_EX_OK)
102 }
103 
104 #endif // PCMK__COMMON_RESULTS_INTERNAL__H
void pcmk__format_result(pcmk__action_result_t *result, int exit_status, enum pcmk_exec_status exec_status, const char *format,...) G_GNUC_PRINTF(4
const size_t pcmk__n_rc
Definition: results.c:331
void void pcmk__set_result_output(pcmk__action_result_t *result, char *out, char *err)
Definition: results.c:1045
enum pcmk_exec_status execution_status
int pcmk__result_bounds(enum pcmk_result_type, int *lower, int *upper)
Definition: results.c:94
void pcmk__copy_result(const pcmk__action_result_t *src, pcmk__action_result_t *dst)
Definition: results.c:1089
Action completed, result is known.
Definition: results.h:333
Success.
Definition: results.h:255
int pcmk__bzlib2rc(int bz2)
Map a bz2 return code to the most similar Pacemaker return code.
Definition: results.c:906
pcmk__action_result_t result
Definition: pcmk_fence.c:35
int pcmk__gaierror2rc(int gai)
Map a getaddrinfo() return code to the most similar Pacemaker return code.
Definition: results.c:865
GQuark pcmk__rc_error_quark(void)
void pcmk__set_result(pcmk__action_result_t *result, int exit_status, enum pcmk_exec_status exec_status, const char *exit_reason)
Definition: results.c:976
pcmk_exec_status
Execution status.
Definition: results.h:330
GQuark pcmk__exitc_error_quark(void)
void pcmk__reset_result(pcmk__action_result_t *result)
Definition: results.c:1065
pcmk_result_type
Types of Pacemaker result codes.
Definition: results.h:364