X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fxml.c;h=6233462c9ca53bc590549e8c8d3d093d1a49b436;hb=edf0f7f5331e626b55819dcafa88e202cdb82a32;hp=142c1a91a6f4d9f20dba78454a56ba66c6e6d906;hpb=9d9c2fe60b5842825002131f4ca926024e6f0038;p=wimlib diff --git a/src/xml.c b/src/xml.c index 142c1a91..6233462c 100644 --- a/src/xml.c +++ b/src/xml.c @@ -89,6 +89,7 @@ struct image_info { tchar *display_name; tchar *display_description; tchar *flags; + bool wimboot; struct wim_lookup_table *lookup_table; /* temporary field */ }; @@ -167,6 +168,18 @@ wim_info_get_num_images(const struct wim_info *info) return 0; } +void +wim_info_set_wimboot(struct wim_info *info, int image, bool value) +{ + info->images[image - 1].wimboot = value; +} + +bool +wim_info_get_wimboot(const struct wim_info *info, int image) +{ + return info->images[image - 1].wimboot; +} + /* Architecture constants are from w64 mingw winnt.h */ #define PROCESSOR_ARCHITECTURE_INTEL 0 #define PROCESSOR_ARCHITECTURE_MIPS 1 @@ -520,6 +533,10 @@ xml_read_image_info(xmlNode *image_node, struct image_info *image_info) ret = node_get_string(child, &image_info->display_name); } else if (node_name_is(child, "DISPLAYDESCRIPTION")) { ret = node_get_string(child, &image_info->display_description); + } else if (node_name_is(child, "WIMBOOT")) { + if (node_get_u64(child) == 1) { + image_info->wimboot = true; + } } if (ret != 0) return ret; @@ -555,8 +572,9 @@ xml_read_wim_info(const xmlNode *wim_node, struct wim_info **wim_info_ret) num_images = 0; for_node_child(wim_node, child) { if (node_is_element(child) && node_name_is(child, "IMAGE")) { - if (num_images == INT_MAX) { - return WIMLIB_ERR_IMAGE_COUNT; + if (unlikely(num_images == MAX_IMAGES)) { + ret = WIMLIB_ERR_IMAGE_COUNT; + goto err; } num_images++; } @@ -606,7 +624,8 @@ xml_read_wim_info(const xmlNode *wim_node, struct wim_info **wim_info_ret) ERROR("WIM images are not indexed [1...%d] " "in XML data as expected", num_images); - return WIMLIB_ERR_IMAGE_COUNT; + ret = WIMLIB_ERR_IMAGE_COUNT; + goto err; } } @@ -944,6 +963,12 @@ xml_write_image_info(xmlTextWriter *writer, const struct image_info *image_info) if (rc) return rc; + if (image_info->wimboot) { + rc = xmlTextWriterWriteFormatElement(writer, "WIMBOOT", "%d", 1); + if (rc < 0) + return rc; + } + rc = xmlTextWriterEndElement(writer); /* */ if (rc < 0) return rc; @@ -1336,6 +1361,8 @@ print_image_info(const struct wim_info *wim_info, int image) print_windows_info(&image_info->windows_info); if (image_info->flags) tprintf(T("Flags: %"TS"\n"), image_info->flags); + tprintf(T("WIMBoot compatible: %"TS"\n"), + image_info->wimboot ? T("yes") : T("no")); tputchar('\n'); } @@ -1550,7 +1577,7 @@ write_wim_xml_data(WIMStruct *wim, int image, u64 total_bytes, size_t xml_len; DEBUG("Writing WIM XML data (image=%d, offset=%"PRIu64")", - image, total_bytes, wim->out_fd.offset); + image, wim->out_fd.offset); ret = prepare_wim_xml_data(wim, image, total_bytes, &xml_data, &xml_len);