X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fxml.c;h=b22bc0945f4e9466ee4dac2f41a49ce9a2bf0a59;hp=52cd441fe2ad38008c4f643b2020ef181a841c73;hb=2254a0fc3f1d7af1151ee83f3458f44339b5028b;hpb=61db93f82eca3fe9f7676355c709c58cc425a6ad diff --git a/src/xml.c b/src/xml.c index 52cd441f..b22bc094 100644 --- a/src/xml.c +++ b/src/xml.c @@ -132,36 +132,68 @@ windows_info_xml_string_specs[] = { u64 wim_info_get_total_bytes(const struct wim_info *info) { - if (!info) + if (info) + return info->total_bytes; + else + return 0; +} + +u64 +wim_info_get_image_hard_link_bytes(const struct wim_info *info, int image) +{ + if (info) + return info->images[image - 1].hard_link_bytes; + else return 0; - return info->total_bytes; } u64 wim_info_get_image_total_bytes(const struct wim_info *info, int image) { - return info->images[image - 1].total_bytes; + if (info) + return info->images[image - 1].total_bytes; + else + return 0; } unsigned wim_info_get_num_images(const struct wim_info *info) { - return info->num_images; + if (info) + return info->num_images; + else + return 0; } +/* Architecture constants are from w64 mingw winnt.h */ +#define PROCESSOR_ARCHITECTURE_INTEL 0 +#define PROCESSOR_ARCHITECTURE_MIPS 1 +#define PROCESSOR_ARCHITECTURE_ALPHA 2 +#define PROCESSOR_ARCHITECTURE_PPC 3 +#define PROCESSOR_ARCHITECTURE_SHX 4 +#define PROCESSOR_ARCHITECTURE_ARM 5 +#define PROCESSOR_ARCHITECTURE_IA64 6 +#define PROCESSOR_ARCHITECTURE_ALPHA64 7 +#define PROCESSOR_ARCHITECTURE_MSIL 8 +#define PROCESSOR_ARCHITECTURE_AMD64 9 +#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10 + /* Returns a statically allocated string that is a string representation of the * architecture number. */ static const tchar * get_arch(int arch) { switch (arch) { - case 0: + case PROCESSOR_ARCHITECTURE_INTEL: return T("x86"); - case 6: + case PROCESSOR_ARCHITECTURE_MIPS: + return T("MIPS"); + case PROCESSOR_ARCHITECTURE_ARM: + return T("ARM"); + case PROCESSOR_ARCHITECTURE_IA64: return T("ia64"); - case 9: + case PROCESSOR_ARCHITECTURE_AMD64: return T("x86_64"); - /* XXX Are there other arch values? */ default: return T("unknown"); } @@ -1270,6 +1302,7 @@ libxml_global_cleanup(void) int read_wim_xml_data(WIMStruct *wim) { + void *buf; u8 *xml_data; xmlDoc *doc; xmlNode *root; @@ -1281,9 +1314,10 @@ read_wim_xml_data(WIMStruct *wim) DEBUG("Reading XML data: %"PRIu64" bytes at offset %"PRIu64"", (u64)res_entry->size, res_entry->offset); - ret = res_entry_to_data(res_entry, wim, (void**)&xml_data); + ret = res_entry_to_data(res_entry, wim, &buf); if (ret) goto out; + xml_data = buf; doc = xmlReadMemory((const char *)xml_data, res_entry->original_size, NULL, "UTF-16LE", 0); @@ -1481,7 +1515,8 @@ write_wim_xml_data(WIMStruct *wim, int image, u64 total_bytes, WIMLIB_COMPRESSION_TYPE_NONE, out_res_entry, NULL, - write_resource_flags); + write_resource_flags, + &wim->lzx_context); FREE(xml_data); return ret; } @@ -1525,6 +1560,9 @@ wimlib_extract_xml_data(WIMStruct *wim, FILE *fp) void *buf; int ret; + if (!wim->filename) + return WIMLIB_ERR_INVALID_PARAM; + ret = res_entry_to_data(&wim->hdr.xml_res_entry, wim, &buf); if (ret) goto out;