X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fxml.c;h=76bc1713116fea98711a25f1bcecd7ebf12fbd42;hb=87a0d455554a9e06bc47457981e370c06b9bcbac;hp=922886d1afa001383e4790eb15465477a1cfe99e;hpb=d0e7f039e4ab206b9fd973c983e3fb841fcd2bf2;p=wimlib diff --git a/src/xml.c b/src/xml.c index 922886d1..76bc1713 100644 --- a/src/xml.c +++ b/src/xml.c @@ -1065,7 +1065,6 @@ static int calculate_dentry_statistics(struct dentry *dentry, void *arg) void xml_update_image_info(WIMStruct *w, int image) { struct image_info *image_info; - struct dentry *root; char *flags_save; DEBUG("Updating the image info for image %d", image); @@ -1140,11 +1139,8 @@ out_free_wim_info: * */ void print_image_info(const struct wim_info *wim_info, int image) { - uint i; const struct image_info *image_info; const char *desc; - int start; - int end; time_t time; char *p; @@ -1280,7 +1276,7 @@ out_cleanup_parser: #define CHECK_RET ({ if (ret < 0) { \ ERROR("Error writing XML data"); \ ret = WIMLIB_ERR_WRITE; \ - goto err2; \ + goto out_free_text_writer; \ } }) /* @@ -1297,8 +1293,6 @@ int write_xml_data(const struct wim_info *wim_info, int image, FILE *out, xmlTextWriter *writer; char *utf16_str; int ret; - int num_images; - int i; const xmlChar *content; size_t len; size_t utf16_len; @@ -1324,13 +1318,13 @@ int write_xml_data(const struct wim_info *wim_info, int image, FILE *out, if (!buf) { ERROR("Failed to allocate XML buffer"); ret = WIMLIB_ERR_NOMEM; - goto err0; + goto out; } writer = xmlNewTextWriterMemory(buf, 0); if (!writer) { ERROR("Failed to allocate XML writer"); ret = WIMLIB_ERR_NOMEM; - goto err1; + goto out_buffer_free; } /* XXX */ @@ -1351,18 +1345,15 @@ int write_xml_data(const struct wim_info *wim_info, int image, FILE *out, total_bytes); CHECK_RET; - if (wim_info) - num_images = wim_info->num_images; - else - num_images = 0; - DEBUG("Writing %u elements", num_images); - - for (i = 1; i <= num_images; i++) { - if (image != WIM_ALL_IMAGES && i != image) - continue; - DEBUG("Writing element for image %d", i); - ret = xml_write_image_info(writer, &wim_info->images[i - 1]); - CHECK_RET; + if (wim_info != NULL) { + DEBUG("Writing %d elements", (int)wim_info->num_images); + for (int i = 1; i <= (int)wim_info->num_images; i++) { + if (image != WIM_ALL_IMAGES && i != image) + continue; + DEBUG("Writing element for image %d", i); + ret = xml_write_image_info(writer, &wim_info->images[i - 1]); + CHECK_RET; + } } ret = xmlTextWriterEndElement(writer); @@ -1371,36 +1362,42 @@ int write_xml_data(const struct wim_info *wim_info, int image, FILE *out, ret = xmlTextWriterEndDocument(writer); CHECK_RET; + xmlFreeTextWriter(writer); + writer = NULL; DEBUG("Done composing XML document. Now converting to UTF-16 and " "writing it to the output file."); content = xmlBufferContent(buf); len = xmlBufferLength(buf); + DEBUG("XML UTF-8 length = %zu", len); + utf16_str = utf8_to_utf16(content, len, &utf16_len); if (!utf16_str) { ret = WIMLIB_ERR_NOMEM; - goto err2; + goto out_free_text_writer; } + DEBUG("XML UTF-16 length = %zu", utf16_len); + if ((putc(0xff, out)) == EOF || (putc(0xfe, out) == EOF) || ((bytes_written = fwrite(utf16_str, 1, utf16_len, out)) != utf16_len)) { ERROR_WITH_ERRNO("Error writing XML data"); ret = WIMLIB_ERR_WRITE; - goto err3; + goto out_free_utf16_str; } DEBUG("Cleaning up."); ret = 0; -err3: +out_free_utf16_str: FREE(utf16_str); -err2: +out_free_text_writer: xmlFreeTextWriter(writer); -err1: +out_buffer_free: xmlBufferFree(buf); -err0: +out: return ret; }