if (rc < 0)
return rc;
- return xmlTextWriterEndElement(writer); /* </VERSION> */
+ rc = xmlTextWriterEndElement(writer); /* </VERSION> */
+ if (rc < 0)
+ return rc;
+
+ return 0;
}
/* Writes the information contained in a `struct windows_info' to the XML
if (windows_info->windows_version_exists) {
rc = xml_write_windows_version(writer, &windows_info->windows_version);
- if (rc < 0)
+ if (rc)
return rc;
}
- rc = xml_write_string(writer, "SYSTEMROOT",
- windows_info->system_root);
+ rc = xml_write_string(writer, "SYSTEMROOT", windows_info->system_root);
if (rc)
return rc;
- return xmlTextWriterEndElement(writer); /* </WINDOWS> */
+ rc = xmlTextWriterEndElement(writer); /* </WINDOWS> */
+ if (rc < 0)
+ return rc;
+
+ return 0;
}
/* Writes a time element to the XML document being constructed in memory. */
rc = xmlTextWriterEndElement(writer); /* </IMAGE> */
if (rc < 0)
return rc;
+
return 0;
}
out_buffer_free:
xmlBufferFree(buf);
out:
+ DEBUG("ret=%d", ret);
return ret;
out_write_error:
WIMLIB_COMPRESSION_TYPE_NONE,
out_res_entry,
NULL,
- write_resource_flags);
+ write_resource_flags,
+ &wim->lzx_context);
FREE(xml_data);
+ DEBUG("ret=%d");
return ret;
}
/* API function documented in wimlib.h */
WIMLIBAPI int
-wimlib_extract_xml_data(WIMStruct *wim, FILE *fp)
+wimlib_get_xml_data(WIMStruct *wim, void **buf_ret, size_t *bufsize_ret)
{
- size_t size;
- void *buf;
- int ret;
+ if (wim->filename == NULL)
+ return WIMLIB_ERR_INVALID_PARAM;
- if (!wim->filename)
+ if (buf_ret == NULL || bufsize_ret == NULL)
return WIMLIB_ERR_INVALID_PARAM;
- ret = res_entry_to_data(&wim->hdr.xml_res_entry, wim, &buf);
+ *bufsize_ret = wim->hdr.xml_res_entry.original_size;
+ return res_entry_to_data(&wim->hdr.xml_res_entry, wim, buf_ret);
+}
+
+WIMLIBAPI int
+wimlib_extract_xml_data(WIMStruct *wim, FILE *fp)
+{
+ int ret;
+ void *buf;
+ size_t bufsize;
+
+ ret = wimlib_get_xml_data(wim, &buf, &bufsize);
if (ret)
- goto out;
+ return ret;
- size = wim->hdr.xml_res_entry.original_size;
- if (fwrite(buf, 1, size, fp) != size) {
+ if (fwrite(buf, 1, bufsize, fp) != bufsize) {
ERROR_WITH_ERRNO("Failed to extract XML data");
ret = WIMLIB_ERR_WRITE;
- goto out_free_buf;
}
-
- ret = 0;
-out_free_buf:
FREE(buf);
-out:
return ret;
}