X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fxml.c;h=2ac8cea8c71e2a50f1a78bd4534c59eb009dfbb5;hb=61edb3642435e6c494d7c7f3038334dd196f58fd;hp=ca2ec3e76ec49df883633ed692a9f3cd9001e267;hpb=1530b6dab02a9e1e5faf81529ab502aee68d8cd2;p=wimlib diff --git a/src/xml.c b/src/xml.c index ca2ec3e7..2ac8cea8 100644 --- a/src/xml.c +++ b/src/xml.c @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2012 Eric Biggers + * Copyright (C) 2012, 2013 Eric Biggers * * This file is part of wimlib, a library for working with WIM files. * @@ -952,9 +952,9 @@ void xml_delete_image(struct wim_info **wim_info_p, int image) destroy_image_info(&wim_info->images[image - 1]); - memcpy(&wim_info->images[image - 1], - &wim_info->images[image], - (wim_info->num_images - image) * sizeof(struct image_info)); + memmove(&wim_info->images[image - 1], + &wim_info->images[image], + (wim_info->num_images - image) * sizeof(struct image_info)); if (--wim_info->num_images == 0) { free_wim_info(wim_info); @@ -1177,6 +1177,16 @@ void print_image_info(const struct wim_info *wim_info, int image) putchar('\n'); } +void libxml_global_init() +{ + xmlInitParser(); +} + +void libxml_global_cleanup() +{ + xmlCleanupParser(); +} + /* * Reads the XML data from a WIM file. */ @@ -1194,19 +1204,19 @@ int read_xml_data(FILE *fp, const struct resource_entry *res_entry, if (resource_is_compressed(res_entry)) { ERROR("XML data is supposed to be uncompressed"); ret = WIMLIB_ERR_XML; - goto out_cleanup_parser; + goto out; } if (res_entry->size < 2) { ERROR("XML data must be at least 2 bytes long"); ret = WIMLIB_ERR_XML; - goto out_cleanup_parser; + goto out; } xml_data = MALLOC(res_entry->size + 2); if (!xml_data) { ret = WIMLIB_ERR_NOMEM; - goto out_cleanup_parser; + goto out; } ret = read_uncompressed_resource(fp, res_entry->offset, @@ -1249,16 +1259,14 @@ int read_xml_data(FILE *fp, const struct resource_entry *res_entry, if (ret != 0) goto out_free_doc; - DEBUG("Freeing XML tree."); - *xml_data_ret = xml_data; xml_data = NULL; out_free_doc: + DEBUG("Freeing XML tree."); xmlFreeDoc(doc); out_free_xml_data: FREE(xml_data); -out_cleanup_parser: - xmlCleanupParser(); +out: return ret; }