]> wimlib.net Git - wimlib/blobdiff - src/xml.c
print_lookup_table(): Print metadata entries
[wimlib] / src / xml.c
index 19cf5f327a0f8698d5534a9db4d1698bce5f85c7..b6a010c4035f49189a34eda3f4703c9e3ab111a2 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
  * along with wimlib; if not, see http://www.gnu.org/licenses/.
  */
 
-#include "dentry.h"
-#include "lookup_table.h"
-#include "timestamp.h"
-#include "wimlib_internal.h"
-#include "xml.h"
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
 
-#include <string.h>
+#include "wimlib/dentry.h"
+#include "wimlib/encoding.h"
+#include "wimlib/error.h"
+#include "wimlib/file_io.h"
+#include "wimlib/lookup_table.h"
+#include "wimlib/metadata.h"
+#include "wimlib/resource.h"
+#include "wimlib/timestamp.h"
+#include "wimlib/xml.h"
+
+#include <libxml/encoding.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 #include <libxml/xmlwriter.h>
-#include <libxml/encoding.h>
 #include <limits.h>
+#include <string.h>
 
 /* Structures used to form an in-memory representation of the XML data (other
  * than the raw parse tree from libxml). */
@@ -440,7 +448,7 @@ xml_read_image_info(xmlNode *image_node, struct image_info *image_info)
        if (!image_info->name) {
                tchar *empty_name;
                WARNING("Image with index %d has no name", image_info->index);
-               empty_name = TMALLOC(1);
+               empty_name = MALLOC(sizeof(tchar));
                if (!empty_name)
                        return WIMLIB_ERR_NOMEM;
                *empty_name = T('\0');
@@ -1221,14 +1229,14 @@ print_image_info(const struct wim_info *wim_info, int image)
 }
 
 void
-libxml_global_init()
+libxml_global_init(void)
 {
        xmlInitParser();
        xmlInitCharEncodingHandlers();
 }
 
 void
-libxml_global_cleanup()
+libxml_global_cleanup(void)
 {
        xmlCleanupParser();
        xmlCleanupCharEncodingHandlers();
@@ -1316,12 +1324,6 @@ out:
        return ret;
 }
 
-#define CHECK_RET  ({  if (ret < 0)  { \
-                               ERROR("Error writing XML data"); \
-                               ret = WIMLIB_ERR_WRITE; \
-                               goto out_free_text_writer; \
-                       } })
-
 /*
  * Writes XML data to a WIM file.
  *
@@ -1397,11 +1399,13 @@ write_xml_data(const struct wim_info *wim_info, int image, int out_fd,
        DEBUG("Writing <WIM> element");
 
        ret = xmlTextWriterStartElement(writer, "WIM");
-       CHECK_RET;
+       if (ret < 0)
+               goto out_write_error;
 
        ret = xmlTextWriterWriteFormatElement(writer, "TOTALBYTES", "%"PRIu64,
                                              total_bytes);
-       CHECK_RET;
+       if (ret < 0)
+               goto out_write_error;
 
        if (wim_info != NULL) {
                int first, last;
@@ -1416,17 +1420,24 @@ write_xml_data(const struct wim_info *wim_info, int image, int out_fd,
                for (int i = first; i <= last; i++) {
                        ret = xml_write_image_info(writer, &wim_info->images[i - 1]);
                        if (ret) {
-                               CHECK_RET;
+                               if (ret < 0)
+                                       goto out_write_error;
                                goto out_free_text_writer;
                        }
                }
        }
 
        ret = xmlTextWriterEndElement(writer);
-       CHECK_RET;
+       if (ret < 0)
+               goto out_write_error;
 
        ret = xmlTextWriterEndDocument(writer);
-       CHECK_RET;
+       if (ret < 0)
+               goto out_write_error;
+
+       ret = xmlTextWriterFlush(writer);
+       if (ret < 0)
+               goto out_write_error;
 
        DEBUG("Ended XML document");
 
@@ -1443,14 +1454,17 @@ write_xml_data(const struct wim_info *wim_info, int image, int out_fd,
 out_free_text_writer:
        /* xmlFreeTextWriter will free the attached xmlOutputBuffer. */
        xmlFreeTextWriter(writer);
-       out_buffer = NULL;
+       goto out;
 out_output_buffer_close:
-       if (out_buffer != NULL)
-               xmlOutputBufferClose(out_buffer);
+       xmlOutputBufferClose(out_buffer);
 out:
        if (ret == 0)
                DEBUG("Successfully wrote XML data");
        return ret;
+out_write_error:
+       ERROR("Error writing XML data");
+       ret = WIMLIB_ERR_WRITE;
+       goto out_free_text_writer;
 }
 
 /* Returns the name of the specified image. */