]> wimlib.net Git - wimlib/blobdiff - src/xml.c
Support basic reading WIMBoot WIMs
[wimlib] / src / xml.c
index 142c1a91a6f4d9f20dba78454a56ba66c6e6d906..dd7de12ea40b617fe866f98e83fee5e38a42854e 100644 (file)
--- 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,12 @@ 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;
+}
+
 /* Architecture constants are from w64 mingw winnt.h  */
 #define PROCESSOR_ARCHITECTURE_INTEL 0
 #define PROCESSOR_ARCHITECTURE_MIPS 1
@@ -520,6 +527,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;
@@ -944,6 +955,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); /* </IMAGE> */
        if (rc < 0)
                return rc;
@@ -1336,6 +1353,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');
 }