return ret >= 0 ? 0 : ret;
}
+LTTNG_HIDDEN
+int config_writer_write_config_element(struct config_writer *writer,
+ const struct config_element *element)
+{
+ int ret = 0;
+
+ xmlNodePtr local_copy = NULL;
+ xmlNodePtr place_holder = NULL;
+ xmlDocPtr document = NULL;
+ xmlBufferPtr buffer = NULL;
+
+ assert(element);
+ assert(element->element);
+ assert(writer);
+
+ /* Create a new doc and set root node as passed element */
+ document = xmlNewDoc(BAD_CAST "1.0");
+ document->parseFlags |= XML_PARSE_NOBLANKS;
+ if (!document) {
+ ERR("Unable to create xml document");
+ ret = -1;
+ goto end;
+ }
+
+ local_copy = xmlCopyNode(element->element, 1);
+ if (!local_copy) {
+ ERR("Unable to copy an xml node");
+ ret = -1;
+ goto end;
+ }
+
+ /* Hand off the local_copy to the xmlDoc */
+ place_holder = xmlDocSetRootElement(document, local_copy);
+ if (place_holder) {
+ ERR("The document root was already set");
+ xmlFreeNode(local_copy);
+ ret = -1;
+ goto end;
+ }
+
+ buffer = xmlBufferCreate();
+ if (!buffer) {
+ ret = -1;
+ goto end;
+ }
+
+ ret = xmlNodeDump(buffer, document, local_copy, 0, 0);
+ xmlTextWriterWriteRaw(writer->writer, xmlBufferContent(buffer));
+end:
+ xmlBufferFree(buffer);
+ xmlFreeDoc(document);
+ return ret;
+}
+
static
void xml_error_handler(void *ctx, const char *format, ...)
{
int config_writer_write_element_string(struct config_writer *writer,
const char *element_name, const char *value);
+/*
+ * Write an element of type config_element.
+ *
+ * writer An instance of a configuration writer.
+ *
+ * element The config_element instance.
+ *
+ * Returns zero if the element could be written.
+ * Negative values indicate an error.
+ */
+LTTNG_HIDDEN
+int config_writer_write_config_element(struct config_writer *writer,
+ const struct config_element *element);
/*
* Load session configurations from a file.
*
element_name, value);
}
+LTTNG_HIDDEN
+int mi_lttng_writer_write_config_element(struct mi_writer *writer,
+ const struct config_element *element)
+{
+ return config_writer_write_config_element(writer->writer,
+ element);
+}
+
LTTNG_HIDDEN
int mi_lttng_version(struct mi_writer *writer, struct mi_lttng_version *version,
const char *lttng_description, const char *lttng_license)
*/
int mi_lttng_writer_write_element_string(struct mi_writer *writer,
const char *element_name, const char *value);
+/*
+* Write a config_element element.
+*
+* writer An instance of a machine interface writer.
+* element A instance of a config_element.
+*
+* Returns zero if the element could be written.
+* Negative values indicate an error.
+*/
+int mi_lttng_writer_write_config_element(struct mi_writer *writer,
+ const struct config_element *element);
/*
* Machine interface of struct version.