pacemaker  2.1.9-49aab99839
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 
19 _Noreturn void pcmk__abort_as(const char *file, const char *function, int line,
20  const char *assert_condition);
21 
22 #define pcmk__assert(expr) do { \
23  if (!(expr)) { \
24  pcmk__abort_as(__FILE__, __func__, __LINE__, #expr); \
25  } \
26  } while(0)
27 
37 #define pcmk__mem_assert(ptr) do { \
38  if ((ptr) == NULL) { \
39  crm_abort(__FILE__, __func__, __LINE__, "Out of memory", FALSE, \
40  TRUE); \
41  crm_exit(CRM_EX_OSERR); \
42  } \
43  } while (0)
44 
45 /* Error domains for use with g_set_error */
46 
47 GQuark pcmk__rc_error_quark(void);
48 GQuark pcmk__exitc_error_quark(void);
49 
50 #define PCMK__RC_ERROR pcmk__rc_error_quark()
51 #define PCMK__EXITC_ERROR pcmk__exitc_error_quark()
52 
53 /* Action results */
54 
55 typedef struct {
56  int exit_status; // Child exit status
57  enum pcmk_exec_status execution_status; // Execution status
58  char *exit_reason; // Brief, human-friendly explanation
59  char *action_stdout; // Action output
60  char *action_stderr; // Action error output
62 
70 #define PCMK__UNKNOWN_RESULT { \
71  .exit_status = CRM_EX_OK, \
72  .execution_status = PCMK_EXEC_UNKNOWN, \
73  .exit_reason = NULL, \
74  .action_stdout = NULL, \
75  .action_stderr = NULL, \
76  }
77 
78 void pcmk__set_result(pcmk__action_result_t *result, int exit_status,
79  enum pcmk_exec_status exec_status,
80  const char *exit_reason);
81 
82 void pcmk__format_result(pcmk__action_result_t *result, int exit_status,
83  enum pcmk_exec_status exec_status,
84  const char *format, ...) G_GNUC_PRINTF(4, 5);
85 
87  char *out, char *err);
88 
90 
93 
94 int pcmk__gaierror2rc(int gai);
95 int pcmk__bzlib2rc(int bz2);
96 
106 static inline bool
107 pcmk__result_ok(const pcmk__action_result_t *result)
108 {
109  return (result != NULL) && (result->exit_status == CRM_EX_OK)
111 }
112 
113 #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:333
void void pcmk__set_result_output(pcmk__action_result_t *result, char *out, char *err)
Definition: results.c:1047
_Noreturn void pcmk__abort_as(const char *file, const char *function, int line, const char *assert_condition)
Definition: results.c:1134
enum pcmk_exec_status execution_status
int pcmk__result_bounds(enum pcmk_result_type, int *lower, int *upper)
Definition: results.c:96
#define _Noreturn
Definition: config.h:667
void pcmk__copy_result(const pcmk__action_result_t *src, pcmk__action_result_t *dst)
Definition: results.c:1091
Action completed, result is known.
Definition: results.h:329
Success.
Definition: results.h:251
int pcmk__bzlib2rc(int bz2)
Map a bz2 return code to the most similar Pacemaker return code.
Definition: results.c:908
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:867
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:978
pcmk_exec_status
Execution status.
Definition: results.h:326
GQuark pcmk__exitc_error_quark(void)
void pcmk__reset_result(pcmk__action_result_t *result)
Definition: results.c:1067
pcmk_result_type
Types of Pacemaker result codes.
Definition: results.h:360