Page MenuHomeClusterLabs Projects

No OneTemporary

diff --git a/lib/common/output_text.c b/lib/common/output_text.c
index 084a0ae44f..e183d0d17c 100644
--- a/lib/common/output_text.c
+++ b/lib/common/output_text.c
@@ -1,259 +1,259 @@
/*
* Copyright 2019 the Pacemaker project contributors
*
* The version control history for this file may have further details.
*
* This source code is licensed under the GNU Lesser General Public License
* version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
*/
#include <stdlib.h>
#include <crm/crm.h>
#include <crm/common/output.h>
#include <glib.h>
/* Disabled for the moment, but we can enable it (or remove it entirely)
* when we make a decision on whether this is preferred output.
*/
#define FANCY_TEXT_OUTPUT 0
GOptionEntry pcmk__text_output_entries[] = {
{ NULL }
};
typedef struct text_list_data_s {
unsigned int len;
char *singular_noun;
char *plural_noun;
} text_list_data_t;
-typedef struct text_private_s {
+typedef struct private_data_s {
GQueue *parent_q;
-} text_private_t;
+} private_data_t;
static void
text_free_priv(pcmk__output_t *out) {
- text_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
if (priv == NULL) {
return;
}
g_queue_free(priv->parent_q);
free(priv);
}
static bool
text_init(pcmk__output_t *out) {
- text_private_t *priv = NULL;
+ private_data_t *priv = NULL;
/* If text_init was previously called on this output struct, just return. */
if (out->priv != NULL) {
return true;
} else {
- out->priv = calloc(1, sizeof(text_private_t));
+ out->priv = calloc(1, sizeof(private_data_t));
if (out->priv == NULL) {
return false;
}
priv = out->priv;
}
priv->parent_q = g_queue_new();
return true;
}
static void
text_finish(pcmk__output_t *out, crm_exit_t exit_status) {
/* This function intentionally left blank */
}
static void
text_reset(pcmk__output_t *out) {
CRM_ASSERT(out->priv != NULL);
text_free_priv(out);
text_init(out);
}
static void
text_subprocess_output(pcmk__output_t *out, int exit_status,
const char *proc_stdout, const char *proc_stderr) {
if (proc_stdout != NULL) {
fprintf(out->dest, "%s\n", proc_stdout);
}
if (proc_stderr != NULL) {
fprintf(out->dest, "%s\n", proc_stderr);
}
}
static void
text_version(pcmk__output_t *out, bool extended) {
if (extended) {
fprintf(out->dest, "Pacemaker %s (Build: %s): %s\n", PACEMAKER_VERSION, BUILD_VERSION, CRM_FEATURES);
} else {
fprintf(out->dest, "Pacemaker %s\n", PACEMAKER_VERSION);
fprintf(out->dest, "Written by Andrew Beekhof\n");
}
}
G_GNUC_PRINTF(2, 3)
static void
text_err(pcmk__output_t *out, const char *format, ...) {
va_list ap;
int len = 0;
va_start(ap, format);
/* Informational output does not get indented, to separate it from other
* potentially indented list output.
*/
len = vfprintf(stderr, format, ap);
CRM_ASSERT(len > 0);
va_end(ap);
/* Add a newline. */
fprintf(stderr, "\n");
}
G_GNUC_PRINTF(2, 3)
static void
text_info(pcmk__output_t *out, const char *format, ...) {
va_list ap;
int len = 0;
va_start(ap, format);
/* Informational output does not get indented, to separate it from other
* potentially indented list output.
*/
len = vfprintf(out->dest, format, ap);
CRM_ASSERT(len > 0);
va_end(ap);
/* Add a newline. */
fprintf(out->dest, "\n");
}
static void
text_output_xml(pcmk__output_t *out, const char *name, const char *buf) {
- text_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
pcmk__indented_printf(out, "%s", buf);
}
static void
text_begin_list(pcmk__output_t *out, const char *name, const char *singular_noun,
const char *plural_noun) {
- text_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
text_list_data_t *new_list = NULL;
CRM_ASSERT(priv != NULL);
#if FANCY_TEXT_OUTPUT > 0
pcmk__indented_printf(out, "%s:\n", name);
#endif
new_list = calloc(1, sizeof(text_list_data_t));
new_list->len = 0;
new_list->singular_noun = singular_noun == NULL ? NULL : strdup(singular_noun);
new_list->plural_noun = plural_noun == NULL ? NULL : strdup(plural_noun);
g_queue_push_tail(priv->parent_q, new_list);
}
static void
text_list_item(pcmk__output_t *out, const char *id, const char *content) {
- text_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
#if FANCY_TEXT_OUTPUT > 0
if (id != NULL) {
pcmk__indented_printf(out, "* %s: %s\n", id, content);
} else {
pcmk__indented_printf(out, "* %s\n", content);
}
#else
fprintf(out->dest, "%s\n", content);
#endif
((text_list_data_t *) g_queue_peek_tail(priv->parent_q))->len++;
}
static void
text_end_list(pcmk__output_t *out) {
- text_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
text_list_data_t *node = NULL;
CRM_ASSERT(priv != NULL);
node = g_queue_pop_tail(priv->parent_q);
if (node->singular_noun != NULL && node->plural_noun != NULL) {
if (node->len == 1) {
pcmk__indented_printf(out, "%d %s found\n", node->len, node->singular_noun);
} else {
pcmk__indented_printf(out, "%d %s found\n", node->len, node->plural_noun);
}
}
free(node);
}
pcmk__output_t *
pcmk__mk_text_output(char **argv) {
pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t));
if (retval == NULL) {
return NULL;
}
retval->request = g_strjoinv(" ", argv);
retval->supports_quiet = true;
retval->init = text_init;
retval->free_priv = text_free_priv;
retval->finish = text_finish;
retval->reset = text_reset;
retval->register_message = pcmk__register_message;
retval->message = pcmk__call_message;
retval->subprocess_output = text_subprocess_output;
retval->version = text_version;
retval->info = text_info;
retval->err = text_err;
retval->output_xml = text_output_xml;
retval->begin_list = text_begin_list;
retval->list_item = text_list_item;
retval->end_list = text_end_list;
return retval;
}
G_GNUC_PRINTF(2, 3)
void
pcmk__indented_printf(pcmk__output_t *out, const char *format, ...) {
va_list ap;
int len = 0;
#if FANCY_TEXT_OUTPUT > 0
int level = 0;
- text_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
level = g_queue_get_length(priv->parent_q);
for (int i = 0; i < level; i++) {
putc('\t', out->dest);
}
#endif
va_start(ap, format);
len = vfprintf(out->dest, format, ap);
CRM_ASSERT(len > 0);
va_end(ap);
}
diff --git a/lib/common/output_xml.c b/lib/common/output_xml.c
index da18f61398..68a8ad802b 100644
--- a/lib/common/output_xml.c
+++ b/lib/common/output_xml.c
@@ -1,322 +1,322 @@
/*
* Copyright 2019 the Pacemaker project contributors
*
* The version control history for this file may have further details.
*
* This source code is licensed under the GNU Lesser General Public License
* version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
*/
#ifndef _GNU_SOURCE
# define _GNU_SOURCE
#endif
#include <ctype.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <crm/crm.h>
#include <crm/common/output.h>
#include <crm/common/xml.h>
#include <glib.h>
GOptionEntry pcmk__xml_output_entries[] = {
{ NULL }
};
-typedef struct xml_private_s {
+typedef struct private_data_s {
xmlNode *root;
GQueue *parent_q;
GSList *errors;
-} xml_private_t;
+} private_data_t;
static void
xml_free_priv(pcmk__output_t *out) {
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
if (priv == NULL) {
return;
}
xmlFreeNode(priv->root);
g_queue_free(priv->parent_q);
g_slist_free(priv->errors);
free(priv);
}
static bool
xml_init(pcmk__output_t *out) {
- xml_private_t *priv = NULL;
+ private_data_t *priv = NULL;
/* If xml_init was previously called on this output struct, just return. */
if (out->priv != NULL) {
return true;
} else {
- out->priv = calloc(1, sizeof(xml_private_t));
+ out->priv = calloc(1, sizeof(private_data_t));
if (out->priv == NULL) {
return false;
}
priv = out->priv;
}
priv->root = create_xml_node(NULL, "pacemaker-result");
xmlSetProp(priv->root, (pcmkXmlStr) "api-version", (pcmkXmlStr) PCMK__API_VERSION);
if (out->request != NULL) {
xmlSetProp(priv->root, (pcmkXmlStr) "request", (pcmkXmlStr) out->request);
}
priv->parent_q = g_queue_new();
priv->errors = NULL;
g_queue_push_tail(priv->parent_q, priv->root);
return true;
}
static void
add_error_node(gpointer data, gpointer user_data) {
char *str = (char *) data;
xmlNodePtr node = (xmlNodePtr) user_data;
xmlNewTextChild(node, NULL, (pcmkXmlStr) "error", (pcmkXmlStr) str);
}
static void
xml_finish(pcmk__output_t *out, crm_exit_t exit_status) {
xmlNodePtr node;
char *rc_as_str = NULL;
char *buf = NULL;
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
/* If root is NULL, xml_init failed and we are being called from pcmk__output_free
* in the pcmk__output_new path.
*/
if (priv->root == NULL) {
return;
}
rc_as_str = crm_itoa(exit_status);
node = xmlNewChild(priv->root, NULL, (pcmkXmlStr) "status", NULL);
xmlSetProp(node, (pcmkXmlStr) "code", (pcmkXmlStr) rc_as_str);
xmlSetProp(node, (pcmkXmlStr) "message", (pcmkXmlStr) crm_exit_str(exit_status));
if (g_slist_length(priv->errors) > 0) {
xmlNodePtr errors_node = xmlNewChild(node, NULL, (pcmkXmlStr) "errors", NULL);
g_slist_foreach(priv->errors, add_error_node, (gpointer) errors_node);
}
buf = dump_xml_formatted_with_text(priv->root);
fprintf(out->dest, "%s", buf);
free(rc_as_str);
free(buf);
}
static void
xml_reset(pcmk__output_t *out) {
char *buf = NULL;
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
buf = dump_xml_formatted_with_text(priv->root);
fprintf(out->dest, "%s", buf);
free(buf);
xml_free_priv(out);
xml_init(out);
}
static void
xml_subprocess_output(pcmk__output_t *out, int exit_status,
const char *proc_stdout, const char *proc_stderr) {
xmlNodePtr node, child_node;
char *rc_as_str = NULL;
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
rc_as_str = crm_itoa(exit_status);
node = xmlNewNode(g_queue_peek_tail(priv->parent_q), (pcmkXmlStr) "command");
xmlSetProp(node, (pcmkXmlStr) "code", (pcmkXmlStr) rc_as_str);
if (proc_stdout != NULL) {
child_node = xmlNewTextChild(node, NULL, (pcmkXmlStr) "output",
(pcmkXmlStr) proc_stdout);
xmlSetProp(child_node, (pcmkXmlStr) "source", (pcmkXmlStr) "stdout");
}
if (proc_stderr != NULL) {
child_node = xmlNewTextChild(node, NULL, (pcmkXmlStr) "output",
(pcmkXmlStr) proc_stderr);
xmlSetProp(child_node, (pcmkXmlStr) "source", (pcmkXmlStr) "stderr");
}
pcmk__xml_add_node(out, node);
free(rc_as_str);
}
static void
xml_version(pcmk__output_t *out, bool extended) {
xmlNodePtr node;
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
node = xmlNewChild(g_queue_peek_tail(priv->parent_q), NULL, (pcmkXmlStr) "version", NULL);
xmlSetProp(node, (pcmkXmlStr) "program", (pcmkXmlStr) "Pacemaker");
xmlSetProp(node, (pcmkXmlStr) "version", (pcmkXmlStr) PACEMAKER_VERSION);
xmlSetProp(node, (pcmkXmlStr) "author", (pcmkXmlStr) "Andrew Beekhof");
xmlSetProp(node, (pcmkXmlStr) "build", (pcmkXmlStr) BUILD_VERSION);
xmlSetProp(node, (pcmkXmlStr) "features", (pcmkXmlStr) CRM_FEATURES);
}
G_GNUC_PRINTF(2, 3)
static void
xml_err(pcmk__output_t *out, const char *format, ...) {
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
int len = 0;
char *buf = NULL;
va_list ap;
CRM_ASSERT(priv != NULL);
va_start(ap, format);
len = vasprintf(&buf, format, ap);
CRM_ASSERT(len > 0);
va_end(ap);
priv->errors = g_slist_append(priv->errors, buf);
}
G_GNUC_PRINTF(2, 3)
static void
xml_info(pcmk__output_t *out, const char *format, ...) {
/* This function intentially left blank */
}
static void
xml_output_xml(pcmk__output_t *out, const char *name, const char *buf) {
xmlNodePtr parent = NULL;
xmlNodePtr cdata_node = NULL;
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
parent = xmlNewChild(g_queue_peek_tail(priv->parent_q), NULL,
(pcmkXmlStr) name, NULL);
cdata_node = xmlNewCDataBlock(getDocPtr(parent), (pcmkXmlStr) buf, strlen(buf));
xmlAddChild(parent, cdata_node);
}
static void
xml_begin_list(pcmk__output_t *out, const char *name,
const char *singular_noun, const char *plural_noun) {
xmlNodePtr list_node = NULL;
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
list_node = create_xml_node(g_queue_peek_tail(priv->parent_q), "list");
xmlSetProp(list_node, (pcmkXmlStr) "name", (pcmkXmlStr) name);
g_queue_push_tail(priv->parent_q, list_node);
}
static void
xml_list_item(pcmk__output_t *out, const char *name, const char *content) {
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
xmlNodePtr item_node = NULL;
CRM_ASSERT(priv != NULL);
item_node = xmlNewChild(g_queue_peek_tail(priv->parent_q), NULL,
(pcmkXmlStr) "item", (pcmkXmlStr) content);
xmlSetProp(item_node, (pcmkXmlStr) "name", (pcmkXmlStr) name);
}
static void
xml_end_list(pcmk__output_t *out) {
char *buf = NULL;
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
xmlNodePtr node;
CRM_ASSERT(priv != NULL);
node = g_queue_pop_tail(priv->parent_q);
buf = crm_strdup_printf("%lu", xmlChildElementCount(node));
xmlSetProp(node, (pcmkXmlStr) "count", (pcmkXmlStr) buf);
free(buf);
}
pcmk__output_t *
pcmk__mk_xml_output(char **argv) {
pcmk__output_t *retval = calloc(1, sizeof(pcmk__output_t));
if (retval == NULL) {
return NULL;
}
retval->request = g_strjoinv(" ", argv);
retval->supports_quiet = false;
retval->init = xml_init;
retval->free_priv = xml_free_priv;
retval->finish = xml_finish;
retval->reset = xml_reset;
retval->register_message = pcmk__register_message;
retval->message = pcmk__call_message;
retval->subprocess_output = xml_subprocess_output;
retval->version = xml_version;
retval->info = xml_info;
retval->err = xml_err;
retval->output_xml = xml_output_xml;
retval->begin_list = xml_begin_list;
retval->list_item = xml_list_item;
retval->end_list = xml_end_list;
return retval;
}
void
pcmk__xml_add_node(pcmk__output_t *out, xmlNodePtr node) {
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
CRM_ASSERT(node != NULL);
xmlAddChild(g_queue_peek_tail(priv->parent_q), node);
}
void
pcmk__xml_push_parent(pcmk__output_t *out, xmlNodePtr parent) {
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
CRM_ASSERT(parent != NULL);
g_queue_push_tail(priv->parent_q, parent);
}
void
pcmk__xml_pop_parent(pcmk__output_t *out) {
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
CRM_ASSERT(g_queue_get_length(priv->parent_q) > 0);
g_queue_pop_tail(priv->parent_q);
}
xmlNodePtr
pcmk__xml_peek_parent(pcmk__output_t *out) {
- xml_private_t *priv = out->priv;
+ private_data_t *priv = out->priv;
CRM_ASSERT(priv != NULL);
/* If queue is empty NULL will be returned */
return g_queue_peek_tail(priv->parent_q);
}

File Metadata

Mime Type
text/x-diff
Expires
Thu, Oct 16, 12:27 AM (16 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2530865
Default Alt Text
(16 KB)

Event Timeline