10#ifndef PCMK__CRM_COMMON_XML_INTERNAL__H
11#define PCMK__CRM_COMMON_XML_INTERNAL__H
33#include <libxml/relaxng.h>
82#define PCMK__XML_LOG_BASE(priority, dechunk, postemit, prefix, fmt, ap) \
84 if (!(dechunk) && (prefix) == NULL) { \
85 qb_log_from_external_source_va(__func__, __FILE__, (fmt), \
86 (priority), __LINE__, 0, (ap)); \
90 char *CXLB_buf = NULL; \
91 static int CXLB_buffer_len = 0; \
92 static char *CXLB_buffer = NULL; \
93 static uint8_t CXLB_priority = 0; \
95 CXLB_len = vasprintf(&CXLB_buf, (fmt), (ap)); \
97 if (CXLB_len <= 0 || CXLB_buf[CXLB_len - 1] == '\n' || !(dechunk)) { \
99 CXLB_buf = (char *) "LOG CORRUPTION HAZARD"; \
100 CXLB_priority = QB_MIN(CXLB_priority, LOG_ERR); \
101 } else if (CXLB_len > 0 \
102 && CXLB_buf[CXLB_len - 1] == '\n') { \
103 CXLB_buf[CXLB_len - 1] = '\0'; \
106 qb_log_from_external_source(__func__, __FILE__, "%s%s%s", \
107 CXLB_priority, __LINE__, 0, \
108 (prefix) != NULL ? (prefix) : "", \
109 CXLB_buffer, CXLB_buf); \
112 qb_log_from_external_source(__func__, __FILE__, "%s%s", \
113 (priority), __LINE__, 0, \
114 (prefix) != NULL ? (prefix) : "", \
117 if (CXLB_len < 0) { \
120 CXLB_buffer = NULL; \
121 CXLB_buffer_len = 0; \
124 } else if (CXLB_buffer == NULL) { \
125 CXLB_buffer_len = CXLB_len; \
126 CXLB_buffer = CXLB_buf; \
128 CXLB_priority = (priority); \
131 CXLB_buffer = realloc(CXLB_buffer, 1 + CXLB_buffer_len + CXLB_len); \
132 memcpy(CXLB_buffer + CXLB_buffer_len, CXLB_buf, CXLB_len); \
133 CXLB_buffer_len += CXLB_len; \
134 CXLB_buffer[CXLB_buffer_len] = '\0'; \
135 CXLB_priority = QB_MIN(CXLB_priority, (priority)); \
167 int depth, uint32_t options);
281 const char *filespec);
291static inline xmlNode *
292pcmk__xml_first_child(
const xmlNode *
parent)
296 while (child && (child->type == XML_TEXT_NODE)) {
310static inline xmlNode *
311pcmk__xml_next(
const xmlNode *child)
313 xmlNode *next = (child? child->next : NULL);
315 while (next && (next->type == XML_TEXT_NODE)) {
429static inline const char *
430pcmk__xml_attr_value(
const xmlAttr *attr)
432 return ((attr == NULL) || (attr->children == NULL))? NULL
433 : (
const char *) attr->children->content;
448 const char *element);
enum pcmk_ipc_server type
Formatted output for pacemaker tools.
This structure contains everything that makes up a single output formatter.
@ pcmk__xml_fmt_close
Include the closing tag of an XML element.
@ pcmk__xml_fmt_children
Include the children of an XML element.
@ pcmk__xml_fmt_open
Include the opening tag of an XML element, and include XML comments.
@ pcmk__xml_fmt_pretty
Include indentation and newlines.
@ pcmk__xml_fmt_filtered
Exclude certain XML attributes (for calculating digests)
@ pcmk__xml_fmt_text
Include XML text nodes.
xmlNode * pcmk__xml_copy(xmlNode *parent, xmlNode *src)
bool pcmk__cib_element_in_patchset(const xmlNode *patchset, const char *element)
void pcmk__xml_sanitize_id(char *id)
@ pcmk__xaf_none
Flag has no effect.
@ pcmk__xaf_no_overwrite
Don't overwrite existing values.
bool pcmk__xml_doc_all_flags_set(const xmlDoc *xml, uint32_t flags)
void pcmk__xml_commit_changes(xmlDoc *doc)
char * pcmk__xml_artefact_root(enum pcmk__xml_artefact_ns ns)
bool pcmk__xml_needs_escape(const char *text, enum pcmk__xml_escape_type type)
bool pcmk__xml_tree_foreach(xmlNode *xml, bool(*fn)(xmlNode *, void *), void *user_data)
void pcmk__strip_xml_text(xmlNode *xml)
void pcmk__xml_doc_set_flags(xmlDoc *doc, uint32_t flags)
int pcmk__xml_show_changes(pcmk__output_t *out, const xmlNode *xml)
@ pcmk__xml_escape_attr_pretty
@ pcmk__xf_deleted
Node was deleted (set for attribute only)
@ pcmk__xf_acl_enabled
ACLs are enabled (set for document only)
@ pcmk__xf_created
Node was created.
@ pcmk__xf_ignore_attr_pos
Ignore attribute moves within an element (set for document only)
@ pcmk__xf_acl_denied
ACLs deny the user access (set for document only)
@ pcmk__xf_modified
Node was modified.
@ pcmk__xf_acl_deny
ACL deny permission (that is, no permission)
@ pcmk__xf_skip
Skip counting this node when getting a node's position among siblings.
@ pcmk__xf_acl_write
ACL write permission (implies read permission in most or all contexts)
@ pcmk__xf_tracking
Tracking is enabled (set for document only)
@ pcmk__xf_none
This flag has no effect.
@ pcmk__xf_moved
Node was moved.
@ pcmk__xf_acl_read
ACL read permission.
char * pcmk__xml_escape(const char *text, enum pcmk__xml_escape_type type)
void pcmk__xml_free(xmlNode *xml)
int pcmk__xml_show(pcmk__output_t *out, const char *prefix, const xmlNode *data, int depth, uint32_t options)
void pcmk__xml_free_doc(xmlDoc *doc)
@ pcmk__xml_artefact_ns_legacy_xslt
@ pcmk__xml_artefact_ns_legacy_rng
@ pcmk__xml_artefact_ns_base_rng
@ pcmk__xml_artefact_ns_base_xslt
void pcmk__xml_mark_changes(xmlNode *old_xml, xmlNode *new_xml)
char * pcmk__xml_artefact_path(enum pcmk__xml_artefact_ns ns, const char *filespec)
Defined string constants for XML element and attribute names.