/src/pacemaker/include/crm/common/xml_element_internal.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright 2017-2026 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__INCLUDED_CRM_COMMON_INTERNAL_H |
11 | | #error "Include <crm/common/internal.h> instead of <xml_element_internal.h> directly" |
12 | | #endif |
13 | | |
14 | | #ifndef PCMK__CRM_COMMON_XML_ELEMENT_INTERNAL__H |
15 | | #define PCMK__CRM_COMMON_XML_ELEMENT_INTERNAL__H |
16 | | |
17 | | /* |
18 | | * Internal-only wrappers for and extensions to libxml2 for processing XML |
19 | | * elements |
20 | | */ |
21 | | |
22 | | #include <stdbool.h> // bool |
23 | | #include <stdint.h> // uint32_t |
24 | | #include <stdio.h> // NULL |
25 | | #include <string.h> // strcmp() |
26 | | |
27 | | #include <glib.h> // guint |
28 | | #include <libxml/tree.h> // xmlNode, etc. |
29 | | |
30 | | #include <crm/common/iso8601.h> // crm_time_t |
31 | | #include <crm/common/strings_internal.h> // pcmk__str_copy() |
32 | | #include <crm/common/xml_names.h> // PCMK_XA_ID |
33 | | |
34 | | #ifdef __cplusplus |
35 | | extern "C" { |
36 | | #endif |
37 | | |
38 | | const char *pcmk__xe_add_last_written(xmlNode *xe); |
39 | | |
40 | | xmlNode *pcmk__xe_first_child(const xmlNode *parent, const char *node_name, |
41 | | const char *attr_n, const char *attr_v); |
42 | | |
43 | | void pcmk__xe_remove_attr(xmlNode *element, const char *name); |
44 | | bool pcmk__xe_remove_attr_cb(xmlNode *xml, void *user_data); |
45 | | void pcmk__xe_remove_matching_attrs(xmlNode *element, bool force, |
46 | | bool (*match)(xmlAttrPtr, void *), |
47 | | void *user_data); |
48 | | int pcmk__xe_delete_match(xmlNode *xml, xmlNode *search); |
49 | | int pcmk__xe_replace_match(xmlNode *xml, xmlNode *replace); |
50 | | int pcmk__xe_update_match(xmlNode *xml, xmlNode *update, uint32_t flags); |
51 | | |
52 | | /*! |
53 | | * \internal |
54 | | * \brief Check whether an XML element is of a particular type |
55 | | * |
56 | | * \param[in] xml XML element to compare |
57 | | * \param[in] name XML element name to compare |
58 | | * |
59 | | * \return \c true if \p xml is of type \p name, otherwise \c false |
60 | | */ |
61 | | static inline bool |
62 | | pcmk__xe_is(const xmlNode *xml, const char *name) |
63 | 0 | { |
64 | 0 | return (xml != NULL) && (xml->name != NULL) && (name != NULL) |
65 | 0 | && (strcmp((const char *) xml->name, name) == 0); |
66 | 0 | } Unexecuted instantiation: scores_fuzzer.c:pcmk__xe_is Unexecuted instantiation: results.c:pcmk__xe_is Unexecuted instantiation: scores.c:pcmk__xe_is Unexecuted instantiation: strings.c:pcmk__xe_is Unexecuted instantiation: utils.c:pcmk__xe_is Unexecuted instantiation: iso8601.c:pcmk__xe_is Unexecuted instantiation: logging.c:pcmk__xe_is Unexecuted instantiation: mainloop.c:pcmk__xe_is Unexecuted instantiation: options.c:pcmk__xe_is Unexecuted instantiation: output.c:pcmk__xe_is Unexecuted instantiation: output_log.c:pcmk__xe_is Unexecuted instantiation: output_text.c:pcmk__xe_is Unexecuted instantiation: output_xml.c:pcmk__xe_is Unexecuted instantiation: patchset_display.c:pcmk__xe_is Unexecuted instantiation: schemas.c:pcmk__xe_is Unexecuted instantiation: xml.c:pcmk__xe_is Unexecuted instantiation: xml_attr.c:pcmk__xe_is Unexecuted instantiation: xml_comment.c:pcmk__xe_is Unexecuted instantiation: xml_display.c:pcmk__xe_is Unexecuted instantiation: xml_element.c:pcmk__xe_is Unexecuted instantiation: xml_idref.c:pcmk__xe_is Unexecuted instantiation: xml_io.c:pcmk__xe_is Unexecuted instantiation: xpath.c:pcmk__xe_is Unexecuted instantiation: acl.c:pcmk__xe_is Unexecuted instantiation: actions.c:pcmk__xe_is Unexecuted instantiation: agents.c:pcmk__xe_is Unexecuted instantiation: cmdline.c:pcmk__xe_is Unexecuted instantiation: digest.c:pcmk__xe_is Unexecuted instantiation: health.c:pcmk__xe_is Unexecuted instantiation: io.c:pcmk__xe_is Unexecuted instantiation: ipc_client.c:pcmk__xe_is Unexecuted instantiation: ipc_common.c:pcmk__xe_is Unexecuted instantiation: ipc_controld.c:pcmk__xe_is Unexecuted instantiation: ipc_pacemakerd.c:pcmk__xe_is Unexecuted instantiation: ipc_schedulerd.c:pcmk__xe_is Unexecuted instantiation: ipc_server.c:pcmk__xe_is Unexecuted instantiation: messages.c:pcmk__xe_is Unexecuted instantiation: nodes.c:pcmk__xe_is Unexecuted instantiation: nvpair.c:pcmk__xe_is Unexecuted instantiation: options_display.c:pcmk__xe_is Unexecuted instantiation: patchset.c:pcmk__xe_is Unexecuted instantiation: procfs.c:pcmk__xe_is Unexecuted instantiation: rules.c:pcmk__xe_is Unexecuted instantiation: servers.c:pcmk__xe_is Unexecuted instantiation: cib.c:pcmk__xe_is Unexecuted instantiation: ipc_attrd.c:pcmk__xe_is Unexecuted instantiation: pid.c:pcmk__xe_is Unexecuted instantiation: attrs.c:pcmk__xe_is Unexecuted instantiation: strings_fuzzer.c:pcmk__xe_is Unexecuted instantiation: cib_file_fuzzer.c:pcmk__xe_is Unexecuted instantiation: cib_client.c:pcmk__xe_is Unexecuted instantiation: cib_file.c:pcmk__xe_is Unexecuted instantiation: cib_native.c:pcmk__xe_is Unexecuted instantiation: cib_ops.c:pcmk__xe_is Unexecuted instantiation: cib_remote.c:pcmk__xe_is Unexecuted instantiation: cib_utils.c:pcmk__xe_is Unexecuted instantiation: remote.c:pcmk__xe_is Unexecuted instantiation: tls.c:pcmk__xe_is Unexecuted instantiation: watchdog.c:pcmk__xe_is Unexecuted instantiation: iso8601_fuzzer.c:pcmk__xe_is |
67 | | |
68 | | xmlNode *pcmk__xe_create(xmlNode *parent, const char *name); |
69 | | xmlNode *pcmk__xe_next(const xmlNode *node, const char *element_name); |
70 | | |
71 | | void pcmk__xe_set_content(xmlNode *node, const char *format, ...) |
72 | | G_GNUC_PRINTF(2, 3); |
73 | | |
74 | | int pcmk__xe_get_score(const xmlNode *xml, const char *name, int *score, |
75 | | int default_score); |
76 | | |
77 | | int pcmk__xe_copy_attrs(xmlNode *target, const xmlNode *src, uint32_t flags); |
78 | | void pcmk__xe_sort_attrs(xmlNode *xml); |
79 | | |
80 | | void pcmk__xe_set_id(xmlNode *xml, const char *format, ...) |
81 | | G_GNUC_PRINTF(2, 3); |
82 | | |
83 | | /*! |
84 | | * \internal |
85 | | * \brief Like pcmk__xe_set_props, but takes a va_list instead of |
86 | | * arguments directly. |
87 | | * |
88 | | * \param[in,out] node XML to add attributes to |
89 | | * \param[in] pairs NULL-terminated list of name/value pairs to add |
90 | | */ |
91 | | void |
92 | | pcmk__xe_set_propv(xmlNodePtr node, va_list pairs); |
93 | | |
94 | | /*! |
95 | | * \internal |
96 | | * \brief Add a NULL-terminated list of name/value pairs to the given |
97 | | * XML node as properties. |
98 | | * |
99 | | * \param[in,out] node XML node to add properties to |
100 | | * \param[in] ... NULL-terminated list of name/value pairs |
101 | | * |
102 | | * \note A NULL name terminates the arguments; a NULL value will be skipped. |
103 | | */ |
104 | | void |
105 | | pcmk__xe_set_props(xmlNodePtr node, ...) |
106 | | G_GNUC_NULL_TERMINATED; |
107 | | |
108 | | /*! |
109 | | * \internal |
110 | | * \brief Get first attribute of an XML element |
111 | | * |
112 | | * \param[in] xe XML element to check |
113 | | * |
114 | | * \return First attribute of \p xe (or NULL if \p xe is NULL or has none) |
115 | | */ |
116 | | static inline xmlAttr * |
117 | | pcmk__xe_first_attr(const xmlNode *xe) |
118 | 0 | { |
119 | 0 | return (xe == NULL)? NULL : xe->properties; |
120 | 0 | } Unexecuted instantiation: scores_fuzzer.c:pcmk__xe_first_attr Unexecuted instantiation: results.c:pcmk__xe_first_attr Unexecuted instantiation: scores.c:pcmk__xe_first_attr Unexecuted instantiation: strings.c:pcmk__xe_first_attr Unexecuted instantiation: utils.c:pcmk__xe_first_attr Unexecuted instantiation: iso8601.c:pcmk__xe_first_attr Unexecuted instantiation: logging.c:pcmk__xe_first_attr Unexecuted instantiation: mainloop.c:pcmk__xe_first_attr Unexecuted instantiation: options.c:pcmk__xe_first_attr Unexecuted instantiation: output.c:pcmk__xe_first_attr Unexecuted instantiation: output_log.c:pcmk__xe_first_attr Unexecuted instantiation: output_text.c:pcmk__xe_first_attr Unexecuted instantiation: output_xml.c:pcmk__xe_first_attr Unexecuted instantiation: patchset_display.c:pcmk__xe_first_attr Unexecuted instantiation: schemas.c:pcmk__xe_first_attr Unexecuted instantiation: xml.c:pcmk__xe_first_attr Unexecuted instantiation: xml_attr.c:pcmk__xe_first_attr Unexecuted instantiation: xml_comment.c:pcmk__xe_first_attr Unexecuted instantiation: xml_display.c:pcmk__xe_first_attr Unexecuted instantiation: xml_element.c:pcmk__xe_first_attr Unexecuted instantiation: xml_idref.c:pcmk__xe_first_attr Unexecuted instantiation: xml_io.c:pcmk__xe_first_attr Unexecuted instantiation: xpath.c:pcmk__xe_first_attr Unexecuted instantiation: acl.c:pcmk__xe_first_attr Unexecuted instantiation: actions.c:pcmk__xe_first_attr Unexecuted instantiation: agents.c:pcmk__xe_first_attr Unexecuted instantiation: cmdline.c:pcmk__xe_first_attr Unexecuted instantiation: digest.c:pcmk__xe_first_attr Unexecuted instantiation: health.c:pcmk__xe_first_attr Unexecuted instantiation: io.c:pcmk__xe_first_attr Unexecuted instantiation: ipc_client.c:pcmk__xe_first_attr Unexecuted instantiation: ipc_common.c:pcmk__xe_first_attr Unexecuted instantiation: ipc_controld.c:pcmk__xe_first_attr Unexecuted instantiation: ipc_pacemakerd.c:pcmk__xe_first_attr Unexecuted instantiation: ipc_schedulerd.c:pcmk__xe_first_attr Unexecuted instantiation: ipc_server.c:pcmk__xe_first_attr Unexecuted instantiation: messages.c:pcmk__xe_first_attr Unexecuted instantiation: nodes.c:pcmk__xe_first_attr Unexecuted instantiation: nvpair.c:pcmk__xe_first_attr Unexecuted instantiation: options_display.c:pcmk__xe_first_attr Unexecuted instantiation: patchset.c:pcmk__xe_first_attr Unexecuted instantiation: procfs.c:pcmk__xe_first_attr Unexecuted instantiation: rules.c:pcmk__xe_first_attr Unexecuted instantiation: servers.c:pcmk__xe_first_attr Unexecuted instantiation: cib.c:pcmk__xe_first_attr Unexecuted instantiation: ipc_attrd.c:pcmk__xe_first_attr Unexecuted instantiation: pid.c:pcmk__xe_first_attr Unexecuted instantiation: attrs.c:pcmk__xe_first_attr Unexecuted instantiation: strings_fuzzer.c:pcmk__xe_first_attr Unexecuted instantiation: cib_file_fuzzer.c:pcmk__xe_first_attr Unexecuted instantiation: cib_client.c:pcmk__xe_first_attr Unexecuted instantiation: cib_file.c:pcmk__xe_first_attr Unexecuted instantiation: cib_native.c:pcmk__xe_first_attr Unexecuted instantiation: cib_ops.c:pcmk__xe_first_attr Unexecuted instantiation: cib_remote.c:pcmk__xe_first_attr Unexecuted instantiation: cib_utils.c:pcmk__xe_first_attr Unexecuted instantiation: remote.c:pcmk__xe_first_attr Unexecuted instantiation: tls.c:pcmk__xe_first_attr Unexecuted instantiation: watchdog.c:pcmk__xe_first_attr Unexecuted instantiation: iso8601_fuzzer.c:pcmk__xe_first_attr |
121 | | |
122 | | /*! |
123 | | * \internal |
124 | | * \brief Iterate over child elements of \p xml |
125 | | * |
126 | | * This function iterates over the children of \p xml, performing the |
127 | | * callback function \p handler on each node. If the callback returns |
128 | | * a value other than pcmk_rc_ok, the iteration stops and the value is |
129 | | * returned. It is therefore possible that not all children will be |
130 | | * visited. |
131 | | * |
132 | | * \param[in,out] xml The starting XML node. Can be NULL. |
133 | | * \param[in] child_element_name The name that the node must match in order |
134 | | * for \p handler to be run. If NULL, all |
135 | | * child elements will match. |
136 | | * \param[in] handler The callback function. |
137 | | * \param[in,out] userdata User data to pass to the callback function. |
138 | | * Can be NULL. |
139 | | * |
140 | | * \return Standard Pacemaker return code |
141 | | */ |
142 | | int |
143 | | pcmk__xe_foreach_child(xmlNode *xml, const char *child_element_name, |
144 | | int (*handler)(xmlNode *xml, void *userdata), |
145 | | void *userdata); |
146 | | |
147 | | const char *pcmk__xe_get(const xmlNode *xml, const char *attr_name); |
148 | | int pcmk__xe_set(xmlNode *xml, const char *attr_name, const char *value); |
149 | | |
150 | | int pcmk__xe_get_datetime(const xmlNode *xml, const char *attr, crm_time_t **t); |
151 | | int pcmk__xe_get_flags(const xmlNode *xml, const char *name, uint32_t *dest, |
152 | | uint32_t default_value); |
153 | | |
154 | | int pcmk__xe_get_guint(const xmlNode *xml, const char *attr, guint *dest); |
155 | | void pcmk__xe_set_guint(xmlNode *xml, const char *attr, guint value); |
156 | | |
157 | | int pcmk__xe_get_int(const xmlNode *xml, const char *name, int *dest); |
158 | | void pcmk__xe_set_int(xmlNode *xml, const char *attr, int value); |
159 | | |
160 | | int pcmk__xe_get_ll(const xmlNode *xml, const char *name, long long *dest); |
161 | | int pcmk__xe_set_ll(xmlNode *xml, const char *attr, long long value); |
162 | | |
163 | | int pcmk__xe_get_time(const xmlNode *xml, const char *attr, time_t *dest); |
164 | | void pcmk__xe_set_time(xmlNode *xml, const char *attr, time_t value); |
165 | | |
166 | | int pcmk__xe_get_timeval(const xmlNode *xml, const char *sec_attr, |
167 | | const char *usec_attr, struct timeval *dest); |
168 | | void pcmk__xe_set_timeval(xmlNode *xml, const char *sec_attr, |
169 | | const char *usec_attr, const struct timeval *value); |
170 | | |
171 | | int pcmk__xe_get_bool(const xmlNode *xml, const char *attr, bool *dest); |
172 | | void pcmk__xe_set_bool(xmlNode *xml, const char *attr, bool value); |
173 | | bool pcmk__xe_attr_is_true(const xmlNode *node, const char *name); |
174 | | |
175 | | /*! |
176 | | * \internal |
177 | | * \brief Retrieve a copy of the value of an XML attribute |
178 | | * |
179 | | * This is like \c pcmk__xe_get() but allocates new memory for the result. |
180 | | * |
181 | | * \param[in] xml XML element whose attribute to get |
182 | | * \param[in] attr Attribute name |
183 | | * |
184 | | * \return Value of specified attribute (or \c NULL if not set) |
185 | | * |
186 | | * \note The caller is responsible for freeing the result using \c free(). |
187 | | */ |
188 | | static inline char * |
189 | | pcmk__xe_get_copy(const xmlNode *xml, const char *attr) |
190 | 0 | { |
191 | 0 | return pcmk__str_copy(pcmk__xe_get(xml, attr)); |
192 | 0 | } Unexecuted instantiation: scores_fuzzer.c:pcmk__xe_get_copy Unexecuted instantiation: results.c:pcmk__xe_get_copy Unexecuted instantiation: scores.c:pcmk__xe_get_copy Unexecuted instantiation: strings.c:pcmk__xe_get_copy Unexecuted instantiation: utils.c:pcmk__xe_get_copy Unexecuted instantiation: iso8601.c:pcmk__xe_get_copy Unexecuted instantiation: logging.c:pcmk__xe_get_copy Unexecuted instantiation: mainloop.c:pcmk__xe_get_copy Unexecuted instantiation: options.c:pcmk__xe_get_copy Unexecuted instantiation: output.c:pcmk__xe_get_copy Unexecuted instantiation: output_log.c:pcmk__xe_get_copy Unexecuted instantiation: output_text.c:pcmk__xe_get_copy Unexecuted instantiation: output_xml.c:pcmk__xe_get_copy Unexecuted instantiation: patchset_display.c:pcmk__xe_get_copy Unexecuted instantiation: schemas.c:pcmk__xe_get_copy Unexecuted instantiation: xml.c:pcmk__xe_get_copy Unexecuted instantiation: xml_attr.c:pcmk__xe_get_copy Unexecuted instantiation: xml_comment.c:pcmk__xe_get_copy Unexecuted instantiation: xml_display.c:pcmk__xe_get_copy Unexecuted instantiation: xml_element.c:pcmk__xe_get_copy Unexecuted instantiation: xml_idref.c:pcmk__xe_get_copy Unexecuted instantiation: xml_io.c:pcmk__xe_get_copy Unexecuted instantiation: xpath.c:pcmk__xe_get_copy Unexecuted instantiation: acl.c:pcmk__xe_get_copy Unexecuted instantiation: actions.c:pcmk__xe_get_copy Unexecuted instantiation: agents.c:pcmk__xe_get_copy Unexecuted instantiation: cmdline.c:pcmk__xe_get_copy Unexecuted instantiation: digest.c:pcmk__xe_get_copy Unexecuted instantiation: health.c:pcmk__xe_get_copy Unexecuted instantiation: io.c:pcmk__xe_get_copy Unexecuted instantiation: ipc_client.c:pcmk__xe_get_copy Unexecuted instantiation: ipc_common.c:pcmk__xe_get_copy Unexecuted instantiation: ipc_controld.c:pcmk__xe_get_copy Unexecuted instantiation: ipc_pacemakerd.c:pcmk__xe_get_copy Unexecuted instantiation: ipc_schedulerd.c:pcmk__xe_get_copy Unexecuted instantiation: ipc_server.c:pcmk__xe_get_copy Unexecuted instantiation: messages.c:pcmk__xe_get_copy Unexecuted instantiation: nodes.c:pcmk__xe_get_copy Unexecuted instantiation: nvpair.c:pcmk__xe_get_copy Unexecuted instantiation: options_display.c:pcmk__xe_get_copy Unexecuted instantiation: patchset.c:pcmk__xe_get_copy Unexecuted instantiation: procfs.c:pcmk__xe_get_copy Unexecuted instantiation: rules.c:pcmk__xe_get_copy Unexecuted instantiation: servers.c:pcmk__xe_get_copy Unexecuted instantiation: cib.c:pcmk__xe_get_copy Unexecuted instantiation: ipc_attrd.c:pcmk__xe_get_copy Unexecuted instantiation: pid.c:pcmk__xe_get_copy Unexecuted instantiation: attrs.c:pcmk__xe_get_copy Unexecuted instantiation: strings_fuzzer.c:pcmk__xe_get_copy Unexecuted instantiation: cib_file_fuzzer.c:pcmk__xe_get_copy Unexecuted instantiation: cib_client.c:pcmk__xe_get_copy Unexecuted instantiation: cib_file.c:pcmk__xe_get_copy Unexecuted instantiation: cib_native.c:pcmk__xe_get_copy Unexecuted instantiation: cib_ops.c:pcmk__xe_get_copy Unexecuted instantiation: cib_remote.c:pcmk__xe_get_copy Unexecuted instantiation: cib_utils.c:pcmk__xe_get_copy Unexecuted instantiation: remote.c:pcmk__xe_get_copy Unexecuted instantiation: tls.c:pcmk__xe_get_copy Unexecuted instantiation: watchdog.c:pcmk__xe_get_copy Unexecuted instantiation: iso8601_fuzzer.c:pcmk__xe_get_copy |
193 | | |
194 | | /*! |
195 | | * \internal |
196 | | * \brief Retrieve the value of the \c PCMK_XA_ID XML attribute |
197 | | * |
198 | | * \param[in] xml XML element to check |
199 | | * |
200 | | * \return Value of the \c PCMK_XA_ID attribute (may be \c NULL) |
201 | | */ |
202 | | static inline const char * |
203 | | pcmk__xe_id(const xmlNode *xml) |
204 | 0 | { |
205 | 0 | return pcmk__xe_get(xml, PCMK_XA_ID); |
206 | 0 | } Unexecuted instantiation: scores_fuzzer.c:pcmk__xe_id Unexecuted instantiation: results.c:pcmk__xe_id Unexecuted instantiation: scores.c:pcmk__xe_id Unexecuted instantiation: strings.c:pcmk__xe_id Unexecuted instantiation: utils.c:pcmk__xe_id Unexecuted instantiation: iso8601.c:pcmk__xe_id Unexecuted instantiation: logging.c:pcmk__xe_id Unexecuted instantiation: mainloop.c:pcmk__xe_id Unexecuted instantiation: options.c:pcmk__xe_id Unexecuted instantiation: output.c:pcmk__xe_id Unexecuted instantiation: output_log.c:pcmk__xe_id Unexecuted instantiation: output_text.c:pcmk__xe_id Unexecuted instantiation: output_xml.c:pcmk__xe_id Unexecuted instantiation: patchset_display.c:pcmk__xe_id Unexecuted instantiation: schemas.c:pcmk__xe_id Unexecuted instantiation: xml.c:pcmk__xe_id Unexecuted instantiation: xml_attr.c:pcmk__xe_id Unexecuted instantiation: xml_comment.c:pcmk__xe_id Unexecuted instantiation: xml_display.c:pcmk__xe_id Unexecuted instantiation: xml_element.c:pcmk__xe_id Unexecuted instantiation: xml_idref.c:pcmk__xe_id Unexecuted instantiation: xml_io.c:pcmk__xe_id Unexecuted instantiation: xpath.c:pcmk__xe_id Unexecuted instantiation: acl.c:pcmk__xe_id Unexecuted instantiation: actions.c:pcmk__xe_id Unexecuted instantiation: agents.c:pcmk__xe_id Unexecuted instantiation: cmdline.c:pcmk__xe_id Unexecuted instantiation: digest.c:pcmk__xe_id Unexecuted instantiation: health.c:pcmk__xe_id Unexecuted instantiation: io.c:pcmk__xe_id Unexecuted instantiation: ipc_client.c:pcmk__xe_id Unexecuted instantiation: ipc_common.c:pcmk__xe_id Unexecuted instantiation: ipc_controld.c:pcmk__xe_id Unexecuted instantiation: ipc_pacemakerd.c:pcmk__xe_id Unexecuted instantiation: ipc_schedulerd.c:pcmk__xe_id Unexecuted instantiation: ipc_server.c:pcmk__xe_id Unexecuted instantiation: messages.c:pcmk__xe_id Unexecuted instantiation: nodes.c:pcmk__xe_id Unexecuted instantiation: nvpair.c:pcmk__xe_id Unexecuted instantiation: options_display.c:pcmk__xe_id Unexecuted instantiation: patchset.c:pcmk__xe_id Unexecuted instantiation: procfs.c:pcmk__xe_id Unexecuted instantiation: rules.c:pcmk__xe_id Unexecuted instantiation: servers.c:pcmk__xe_id Unexecuted instantiation: cib.c:pcmk__xe_id Unexecuted instantiation: ipc_attrd.c:pcmk__xe_id Unexecuted instantiation: pid.c:pcmk__xe_id Unexecuted instantiation: attrs.c:pcmk__xe_id Unexecuted instantiation: strings_fuzzer.c:pcmk__xe_id Unexecuted instantiation: cib_file_fuzzer.c:pcmk__xe_id Unexecuted instantiation: cib_client.c:pcmk__xe_id Unexecuted instantiation: cib_file.c:pcmk__xe_id Unexecuted instantiation: cib_native.c:pcmk__xe_id Unexecuted instantiation: cib_ops.c:pcmk__xe_id Unexecuted instantiation: cib_remote.c:pcmk__xe_id Unexecuted instantiation: cib_utils.c:pcmk__xe_id Unexecuted instantiation: remote.c:pcmk__xe_id Unexecuted instantiation: tls.c:pcmk__xe_id Unexecuted instantiation: watchdog.c:pcmk__xe_id Unexecuted instantiation: iso8601_fuzzer.c:pcmk__xe_id |
207 | | |
208 | | #ifdef __cplusplus |
209 | | } |
210 | | #endif |
211 | | |
212 | | #endif // PCMK__CRM_COMMON_XML_ELEMENT_INTERNAL__H |