10 #ifndef PCMK__XML_INTERNAL__H 11 # define PCMK__XML_INTERNAL__H 67 #define PCMK__XML_LOG_BASE(priority, dechunk, postemit, prefix, fmt, ap) \ 69 if (!(dechunk) && (prefix) == NULL) { \ 70 qb_log_from_external_source_va(__func__, __FILE__, (fmt), \ 71 (priority), __LINE__, 0, (ap)); \ 75 char *CXLB_buf = NULL; \ 76 static int CXLB_buffer_len = 0; \ 77 static char *CXLB_buffer = NULL; \ 78 static uint8_t CXLB_priority = 0; \ 80 CXLB_len = vasprintf(&CXLB_buf, (fmt), (ap)); \ 82 if (CXLB_len <= 0 || CXLB_buf[CXLB_len - 1] == '\n' || !(dechunk)) { \ 84 CXLB_buf = (char *) "LOG CORRUPTION HAZARD"; \ 85 CXLB_priority = QB_MIN(CXLB_priority, LOG_ERR); \ 86 } else if (CXLB_len > 0 \ 87 && CXLB_buf[CXLB_len - 1] == '\n') { \ 88 CXLB_buf[CXLB_len - 1] = '\0'; \ 91 qb_log_from_external_source(__func__, __FILE__, "%s%s%s", \ 92 CXLB_priority, __LINE__, 0, \ 93 (prefix) != NULL ? (prefix) : "", \ 94 CXLB_buffer, CXLB_buf); \ 97 qb_log_from_external_source(__func__, __FILE__, "%s%s", \ 98 (priority), __LINE__, 0, \ 99 (prefix) != NULL ? (prefix) : "", \ 102 if (CXLB_len < 0) { \ 105 CXLB_buffer = NULL; \ 106 CXLB_buffer_len = 0; \ 109 } else if (CXLB_buffer == NULL) { \ 110 CXLB_buffer_len = CXLB_len; \ 111 CXLB_buffer = CXLB_buf; \ 113 CXLB_priority = (priority); \ 116 CXLB_buffer = realloc(CXLB_buffer, 1 + CXLB_buffer_len + CXLB_len); \ 117 memcpy(CXLB_buffer + CXLB_buffer_len, CXLB_buf, CXLB_len); \ 118 CXLB_buffer_len += CXLB_len; \ 119 CXLB_buffer[CXLB_buffer_len] = '\0'; \ 120 CXLB_priority = QB_MIN(CXLB_priority, (priority)); \ 137 const char *attr_n,
const char *attr_v);
160 const char *filespec);
170 static inline xmlNode *
171 pcmk__xml_first_child(
const xmlNode *parent)
173 xmlNode *child = (parent? parent->children : NULL);
175 while (child && (child->type == XML_TEXT_NODE)) {
189 static inline xmlNode *
190 pcmk__xml_next(
const xmlNode *child)
192 xmlNode *next = (child? child->next : NULL);
194 while (next && (next->type == XML_TEXT_NODE)) {
208 static inline xmlNode *
209 pcmk__xe_first_child(
const xmlNode *parent)
211 xmlNode *child = (parent? parent->children : NULL);
213 while (child && (child->type != XML_ELEMENT_NODE)) {
227 static inline xmlNode *
228 pcmk__xe_next(
const xmlNode *child)
230 xmlNode *next = child? child->next : NULL;
232 while (next && (next->type != XML_ELEMENT_NODE)) {
238 #endif // PCMK__XML_INTERNAL__H char * pcmk__xml_artefact_root(enum pcmk__xml_artefact_ns ns)
const char * pcmk__xe_add_last_written(xmlNode *xe)
xmlNode * pcmk__xe_match(xmlNode *parent, const char *node_name, const char *attr_n, const char *attr_v)
void pcmk__strip_xml_text(xmlNode *xml)
char * pcmk__xml_artefact_path(enum pcmk__xml_artefact_ns ns, const char *filespec)