]> wimlib.net Git - wimlib/blobdiff - src/xml.c
Remove unnecessary argument to hlist iteration macros
[wimlib] / src / xml.c
index 383e20342dfddadabae9196380d9e866057e0dba..24fb32875da07b10bb9f00f15493ab3796494be7 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
 #  include "config.h"
 #endif
 
+#include <libxml/encoding.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <libxml/xmlwriter.h>
+#include <string.h>
+
+#include "wimlib/assert.h"
+#include "wimlib/blob_table.h"
 #include "wimlib/dentry.h"
 #include "wimlib/encoding.h"
 #include "wimlib/error.h"
 #include "wimlib/file_io.h"
-#include "wimlib/lookup_table.h"
 #include "wimlib/metadata.h"
 #include "wimlib/resource.h"
 #include "wimlib/timestamp.h"
 #include "wimlib/xml.h"
 #include "wimlib/write.h"
 
-#include <libxml/encoding.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/xmlwriter.h>
-#include <limits.h>
-#include <string.h>
-#include <unistd.h>
-
 /* Structures used to form an in-memory representation of the XML data (other
  * than the raw parse tree from libxml). */
 
@@ -91,7 +90,7 @@ struct image_info {
 
        /* Note: must update clone_image_info() if adding new fields here  */
 
-       struct wim_lookup_table *lookup_table; /* temporary field */
+       struct blob_table *blob_table; /* temporary field */
 };
 
 /* A struct wim_info structure corresponds to the entire XML data for a WIM file. */
@@ -490,7 +489,7 @@ xml_read_image_info(xmlNode *image_node, struct image_info *image_info)
        index_prop = xmlGetProp(image_node, "INDEX");
        if (index_prop) {
                image_info->index = atoi(index_prop);
-               FREE(index_prop);
+               xmlFree(index_prop);
        } else {
                image_info->index = 1;
        }
@@ -1215,22 +1214,24 @@ calculate_dentry_statistics(struct wim_dentry *dentry, void *arg)
        if (!(inode->i_attributes & (FILE_ATTRIBUTE_DIRECTORY |
                                     FILE_ATTRIBUTE_REPARSE_POINT)))
        {
-               struct wim_lookup_table_entry *lte;
+               struct blob_descriptor *blob;
 
-               lte = inode_unnamed_lte(inode, info->lookup_table);
-               if (lte) {
-                       info->total_bytes += lte->size;
+               blob = inode_get_blob_for_unnamed_data_stream(inode,
+                                                             info->blob_table);
+               if (blob) {
+                       info->total_bytes += blob->size;
                        if (!dentry_is_first_in_inode(dentry))
-                               info->hard_link_bytes += lte->size;
+                               info->hard_link_bytes += blob->size;
                }
 
                if (inode->i_nlink >= 2 && dentry_is_first_in_inode(dentry)) {
-                       for (unsigned i = 0; i < inode->i_num_ads; i++) {
-                               if (inode->i_ads_entries[i].stream_name_nbytes) {
-                                       lte = inode_stream_lte(inode, i + 1, info->lookup_table);
-                                       if (lte) {
+                       for (unsigned i = 0; i < inode->i_num_streams; i++) {
+                               if (stream_is_named_data_stream(&inode->i_streams[i])) {
+                                       blob = stream_blob(&inode->i_streams[i],
+                                                          info->blob_table);
+                                       if (blob) {
                                                info->hard_link_bytes += inode->i_nlink *
-                                                                        lte->size;
+                                                                        blob->size;
                                        }
                                }
                        }
@@ -1241,7 +1242,7 @@ calculate_dentry_statistics(struct wim_dentry *dentry, void *arg)
 
 /*
  * Calculate what to put in the <FILECOUNT>, <DIRCOUNT>, <TOTALBYTES>, and
- * <HARDLINKBYTES> elements of each <IMAGE>.
+ * <HARDLINKBYTES> elements of the specified WIM image.
  */
 void
 xml_update_image_info(WIMStruct *wim, int image)
@@ -1256,12 +1257,12 @@ xml_update_image_info(WIMStruct *wim, int image)
        image_info->dir_count       = 0;
        image_info->total_bytes     = 0;
        image_info->hard_link_bytes = 0;
-       image_info->lookup_table = wim->lookup_table;
+       image_info->blob_table = wim->blob_table;
 
        for_dentry_in_tree(wim->image_metadata[image - 1]->root_dentry,
                           calculate_dentry_statistics,
                           image_info);
-       image_info->last_modification_time = get_wim_timestamp();
+       image_info->last_modification_time = now_as_wim_timestamp();
 }
 
 /* Adds an image to the XML information. */
@@ -1292,7 +1293,7 @@ xml_add_image(WIMStruct *wim, const tchar *name)
 
        wim->wim_info = wim_info;
        image_info->index = wim_info->num_images;
-       image_info->creation_time = get_wim_timestamp();
+       image_info->creation_time = now_as_wim_timestamp();
        xml_update_image_info(wim, image_info->index);
        return 0;
 
@@ -1580,7 +1581,7 @@ write_wim_xml_data(WIMStruct *wim, int image, u64 total_bytes,
         * compressed XML data, MS software cannot.  */
        ret = write_wim_resource_from_buffer(xml_data,
                                             xml_len,
-                                            WIM_RESHDR_FLAG_METADATA,
+                                            true,
                                             &wim->out_fd,
                                             WIMLIB_COMPRESSION_TYPE_NONE,
                                             0,
@@ -1667,29 +1668,19 @@ wimlib_set_image_name(WIMStruct *wim, int image, const tchar *name)
 {
        tchar *p;
        int i;
-       int ret;
-
-       DEBUG("Setting the name of image %d to %"TS, image, name);
-
-       ret = can_modify_wim(wim);
-       if (ret)
-               return ret;
 
        if (name == NULL)
                name = T("");
 
-       if (image < 1 || image > wim->hdr.image_count) {
-               ERROR("%d is not a valid image", image);
+       if (image < 1 || image > wim->hdr.image_count)
                return WIMLIB_ERR_INVALID_IMAGE;
-       }
 
-       for (i = 1; i <= wim->hdr.image_count; i++) {
-               if (i == image)
-                       continue;
-               if (!tstrcmp(wim->wim_info->images[i - 1].name, name)) {
-                       ERROR("The name \"%"TS"\" is already in use in the WIM!",
-                             name);
-                       return WIMLIB_ERR_IMAGE_NAME_COLLISION;
+       if (*name) {
+               for (i = 1; i <= wim->hdr.image_count; i++) {
+                       if (i == image)
+                               continue;
+                       if (!tstrcmp(wim->wim_info->images[i - 1].name, name))
+                               return WIMLIB_ERR_IMAGE_NAME_COLLISION;
                }
        }
 
@@ -1708,11 +1699,6 @@ do_set_image_info_str(WIMStruct *wim, int image, const tchar *tstr,
 {
        tchar *tstr_copy;
        tchar **dest_tstr_p;
-       int ret;
-
-       ret = can_modify_wim(wim);
-       if (ret)
-               return ret;
 
        if (image < 1 || image > wim->hdr.image_count) {
                ERROR("%d is not a valid image", image);