X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fxml.c;h=deeedb50efba04f5088e52615f66380124846c8f;hp=5258aaf4cfacb7275e1d8203195668b09680c20d;hb=2b4f92cc80af257566c00e62fd3f0a7e3607416b;hpb=db52422f8a9e87e7d160b68b3271d26c41f0687e;ds=sidebyside diff --git a/src/xml.c b/src/xml.c index 5258aaf4..deeedb50 100644 --- a/src/xml.c +++ b/src/xml.c @@ -1564,30 +1564,34 @@ wimlib_image_name_in_use(const WIMStruct *wim, const tchar *name) /* 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; }