]> wimlib.net Git - wimlib/blobdiff - src/xml.c
Stream and blob updates
[wimlib] / src / xml.c
index 4617e2ab4cbd6fa8a3e1bec379ccb33e6e1fcfd7..58750a1f1eb4d907a56b2162f18de42900536dfe 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;
                                        }
                                }
                        }
@@ -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;