Add writer function for raw config_element
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Wed, 22 Jun 2016 22:28:51 +0000 (18:28 -0400)
committerJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Mon, 11 Jul 2016 15:20:32 +0000 (11:20 -0400)
src/common/config/session-config.c
src/common/config/session-config.h
src/common/mi-lttng.c
src/common/mi-lttng.h

index 0b731867d31a5eab000bf301f25a94180274a305..7322bc8b2c5398b75f5a199e2a17a27f5c7e826f 100644 (file)
@@ -643,6 +643,60 @@ end:
        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, ...)
 {
index af3d6ff85260b0021018b4fa82ae2541d7ef8f91..8e6e2803fc50658450c13c15b5d81f355f8ac610 100644 (file)
@@ -215,6 +215,19 @@ LTTNG_HIDDEN
 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.
  *
index 109fb418a7b03a98ce705df8dfb29509bb1888c3..05f1d1e90c6b01ae6df1aff9fcc5b7522457a0d0 100644 (file)
@@ -616,6 +616,14 @@ int mi_lttng_writer_write_element_string(struct mi_writer *writer,
                        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)
index 585818dae4387b5698dde31af7d5d0355a0c1094..33ca588913d73bccf4674f5ca5c015aaf19f7968 100644 (file)
@@ -321,6 +321,17 @@ int mi_lttng_writer_write_element_bool(struct mi_writer *writer,
  */
 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.
This page took 0.031448 seconds and 5 git commands to generate.