]> wimlib.net Git - wimlib/blobdiff - src/xml.c
Fix typo
[wimlib] / src / xml.c
index 76bc1713116fea98711a25f1bcecd7ebf12fbd42..9a0bded26bbfc4f863c9db2ecf820e8a794d5d7f 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -621,13 +621,6 @@ static int xml_write_windows_info(xmlTextWriter *writer,
                        return rc;
        }
 
-       if (windows_info->system_root) {
-               rc = xmlTextWriterWriteElement(writer, "SYSTEMROOT",
-                                               windows_info->system_root);
-                       if (rc < 0)
-                               return rc;
-       }
-
        if (windows_info->product_type) {
                rc = xmlTextWriterWriteElement(writer, "PRODUCTTYPE",
                                                windows_info->product_type);
@@ -669,6 +662,13 @@ static int xml_write_windows_info(xmlTextWriter *writer,
                        return rc;
        }
 
+       if (windows_info->system_root) {
+               rc = xmlTextWriterWriteElement(writer, "SYSTEMROOT",
+                                               windows_info->system_root);
+                       if (rc < 0)
+                               return rc;
+       }
+
        return xmlTextWriterEndElement(writer); /* </WINDOWS> */
 }
 
@@ -682,12 +682,12 @@ static int xml_write_time(xmlTextWriter *writer, const char *element_name,
                return rc;
 
        rc = xmlTextWriterWriteFormatElement(writer, "HIGHPART",
-                                       "0x%"PRIX32, (u32)(time >> 32));
+                                            "0x%08"PRIX32, (u32)(time >> 32));
        if (rc < 0)
                return rc;
 
        rc = xmlTextWriterWriteFormatElement(writer, "LOWPART",
-                                               "0x%"PRIX32, (u32)time);
+                                            "0x%08"PRIX32, (u32)time);
        if (rc < 0)
                return rc;
 
@@ -1287,7 +1287,7 @@ out_cleanup_parser:
  * the offset of the XML data.
  */
 int write_xml_data(const struct wim_info *wim_info, int image, FILE *out,
-                  u64 total_bytes)
+                  u64 total_bytes, struct resource_entry *out_res_entry)
 {
        xmlBuffer     *buf;
        xmlTextWriter *writer;
@@ -1297,11 +1297,16 @@ int write_xml_data(const struct wim_info *wim_info, int image, FILE *out,
        size_t len;
        size_t utf16_len;
        size_t bytes_written;
+       off_t start_offset, end_offset;
 
-       wimlib_assert(image == WIM_ALL_IMAGES ||
+       wimlib_assert(image == WIMLIB_ALL_IMAGES ||
                        (wim_info != NULL && image >= 1 &&
                         image <= wim_info->num_images));
 
+       start_offset = ftello(out);
+       if (start_offset == -1)
+               return WIMLIB_ERR_WRITE;
+
        /* The contents of the <TOTALBYTES> element in the XML data, under the
         * <WIM> element not the <IMAGE> element, is (for non-spit WIMs) the
         * size of the WIM file excluding the XML data and integrity table,
@@ -1348,7 +1353,7 @@ int write_xml_data(const struct wim_info *wim_info, int image, FILE *out,
        if (wim_info != NULL) {
                DEBUG("Writing %d <IMAGE> elements", (int)wim_info->num_images);
                for (int i = 1; i <= (int)wim_info->num_images; i++) {
-                       if (image != WIM_ALL_IMAGES && i != image)
+                       if (image != WIMLIB_ALL_IMAGES && i != image)
                                continue;
                        DEBUG("Writing <IMAGE> element for image %d", i);
                        ret = xml_write_image_info(writer, &wim_info->images[i - 1]);
@@ -1390,6 +1395,16 @@ int write_xml_data(const struct wim_info *wim_info, int image, FILE *out,
 
        DEBUG("Cleaning up.");
 
+       end_offset = ftello(out);
+       if (end_offset == -1) {
+               ret = WIMLIB_ERR_WRITE;
+               goto out_free_utf16_str;
+       }
+
+       out_res_entry->offset        = start_offset;
+       out_res_entry->size          = end_offset - start_offset;
+       out_res_entry->original_size = end_offset - start_offset;
+       out_res_entry->flags         = WIM_RESHDR_FLAG_METADATA;
        ret = 0;
 out_free_utf16_str:
        FREE(utf16_str);
@@ -1428,7 +1443,7 @@ WIMLIBAPI bool wimlib_image_name_in_use(const WIMStruct *w, const char *name)
        int i;
 
        DEBUG("Checking to see if the image name `%s' is already in use", name);
-       if (!name || !w->wim_info)
+       if (!name || !*name || !w->wim_info)
                return false;
        for (i = 1; i <= w->wim_info->num_images; i++)
                if (strcmp(w->wim_info->images[i - 1].name, name) == 0)
@@ -1440,6 +1455,9 @@ WIMLIBAPI bool wimlib_image_name_in_use(const WIMStruct *w, const char *name)
 WIMLIBAPI int wimlib_extract_xml_data(WIMStruct *w, FILE *fp)
 {
        DEBUG("Extracting the XML data.");
+       if (!w->xml_data)
+               return WIMLIB_ERR_INVALID_PARAM;
+
        if (fwrite(w->xml_data, 1, w->hdr.xml_res_entry.size, fp) !=
                        w->hdr.xml_res_entry.size) {
                ERROR_WITH_ERRNO("Failed to extract XML data");