pacemaker
2.0.3-4b1f869f0f
Scalable High-Availability cluster resource manager
include
crm
common
xml_internal.h
Go to the documentation of this file.
1
/*
2
* Copyright 2017-2018 the Pacemaker project contributors
3
*
4
* The version control history for this file may have further details.
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2 of the License, or (at your option) any later version.
10
*
11
* This software is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with this library; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
#ifndef CRM_COMMON_XML_INTERNAL__H
21
# define CRM_COMMON_XML_INTERNAL__H
22
23
/*
24
* Internal-only wrappers for and extensions to libxml2 (libxslt)
25
*/
26
27
# include <stdlib.h>
28
# include <stdio.h>
29
# include <string.h>
30
31
# include <
crm/crm.h
>
/* transitively imports qblog.h */
32
33
77
#define CRM_XML_LOG_BASE(priority, dechunk, postemit, prefix, fmt, ap) \
78
do { \
79
if (!(dechunk) && (prefix) == NULL) {
/* quick pass */
\
80
qb_log_from_external_source_va(__FUNCTION__, __FILE__, (fmt), \
81
(priority), __LINE__, 0, (ap)); \
82
(void) (postemit); \
83
} else { \
84
int CXLB_len = 0; \
85
char *CXLB_buf = NULL; \
86
static int CXLB_buffer_len = 0; \
87
static char *CXLB_buffer = NULL; \
88
static uint8_t CXLB_priority = 0; \
89
\
90
CXLB_len = vasprintf(&CXLB_buf, (fmt), (ap)); \
91
\
92
if (CXLB_len <= 0 || CXLB_buf[CXLB_len - 1] == '\n' || !(dechunk)) { \
93
if (CXLB_len < 0) { \
94
CXLB_buf = (char *) "LOG CORRUPTION HAZARD";
/*we don't modify*/
\
95
CXLB_priority = QB_MIN(CXLB_priority, LOG_ERR); \
96
} else if (CXLB_len > 0
/* && (dechunk) */
\
97
&& CXLB_buf[CXLB_len - 1] == '\n') { \
98
CXLB_buf[CXLB_len - 1] = '\0'; \
99
} \
100
if (CXLB_buffer) { \
101
qb_log_from_external_source(__FUNCTION__, __FILE__, "%s%s%s", \
102
CXLB_priority, __LINE__, 0, \
103
(prefix) != NULL ? (prefix) : "", \
104
CXLB_buffer, CXLB_buf); \
105
free(CXLB_buffer); \
106
} else { \
107
qb_log_from_external_source(__FUNCTION__, __FILE__, "%s%s", \
108
(priority), __LINE__, 0, \
109
(prefix) != NULL ? (prefix) : "", \
110
CXLB_buf); \
111
} \
112
if (CXLB_len < 0) { \
113
CXLB_buf = NULL;
/* restore temporary override */
\
114
} \
115
CXLB_buffer = NULL; \
116
CXLB_buffer_len = 0; \
117
(void) (postemit); \
118
\
119
} else if (CXLB_buffer == NULL) { \
120
CXLB_buffer_len = CXLB_len; \
121
CXLB_buffer = CXLB_buf; \
122
CXLB_buf = NULL; \
123
CXLB_priority = (priority);
/* remember as a running severest */
\
124
\
125
} else { \
126
CXLB_buffer = realloc(CXLB_buffer, 1 + CXLB_buffer_len + CXLB_len); \
127
memcpy(CXLB_buffer + CXLB_buffer_len, CXLB_buf, CXLB_len); \
128
CXLB_buffer_len += CXLB_len; \
129
CXLB_buffer[CXLB_buffer_len] = '\0'; \
130
CXLB_priority = QB_MIN(CXLB_priority, (priority));
/* severest? */
\
131
} \
132
free(CXLB_buf); \
133
} \
134
} while (0)
135
136
enum
pcmk__xml_artefact_ns
{
137
pcmk__xml_artefact_ns_legacy_rng
= 1,
138
pcmk__xml_artefact_ns_legacy_xslt
,
139
pcmk__xml_artefact_ns_base_rng
,
140
pcmk__xml_artefact_ns_base_xslt
,
141
};
142
151
char
*
152
pcmk__xml_artefact_root
(
enum
pcmk__xml_artefact_ns
ns);
153
163
char
*
pcmk__xml_artefact_path
(
enum
pcmk__xml_artefact_ns
ns,
164
const
char
*filespec);
165
166
#endif
pcmk__xml_artefact_ns_base_xslt
Definition:
xml_internal.h:140
pcmk__xml_artefact_ns_legacy_xslt
Definition:
xml_internal.h:138
pcmk__xml_artefact_path
char * pcmk__xml_artefact_path(enum pcmk__xml_artefact_ns ns, const char *filespec)
Definition:
xml.c:4524
pcmk__xml_artefact_ns_legacy_rng
Definition:
xml_internal.h:137
pcmk__xml_artefact_root
char * pcmk__xml_artefact_root(enum pcmk__xml_artefact_ns ns)
Definition:
xml.c:4496
pcmk__xml_artefact_ns
pcmk__xml_artefact_ns
Definition:
xml_internal.h:136
pcmk__xml_artefact_ns_base_rng
Definition:
xml_internal.h:139
crm.h
A dumping ground.
Generated on Sun Dec 22 2019 20:08:01 for pacemaker by
1.8.16