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);
for_dentry_in_tree(w->image_metadata[image - 1].root_dentry,
calculate_dentry_statistics,
image_info);
-
+
image_info->lookup_table = NULL;
image_info->flags = flags_save;
image_info->last_modification_time = get_wim_timestamp();
* */
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;
#define CHECK_RET ({ if (ret < 0) { \
ERROR("Error writing XML data"); \
ret = WIMLIB_ERR_WRITE; \
- goto err2; \
+ goto out_free_text_writer; \
} })
/*
xmlTextWriter *writer;
char *utf16_str;
int ret;
- int num_images;
- int i;
const xmlChar *content;
size_t len;
size_t utf16_len;
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 */
total_bytes);
CHECK_RET;
- if (wim_info)
- num_images = wim_info->num_images;
- else
- num_images = 0;
- DEBUG("Writing %u <IMAGE> elements", num_images);
-
- for (i = 1; i <= num_images; i++) {
- if (image != WIM_ALL_IMAGES && i != image)
- continue;
- DEBUG("Writing <IMAGE> 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 <IMAGE> 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 <IMAGE> element for image %d", i);
+ ret = xml_write_image_info(writer, &wim_info->images[i - 1]);
+ CHECK_RET;
+ }
}
ret = xmlTextWriterEndElement(writer);
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;
}