]> wimlib.net Git - wimlib/blobdiff - src/wimlib_internal.h
refcnt image metadata; calculate full path on-demand
[wimlib] / src / wimlib_internal.h
index 61a70f1c354db7b77f50faa93f244636c5634a32..18f027387136009dfd737937372a711f3728eb52 100644 (file)
@@ -234,15 +234,13 @@ struct wim_security_data {
 
        /* Array of descriptors. */
        u8 **descriptors;
 
        /* Array of descriptors. */
        u8 **descriptors;
-
-       /* Keep track of how many WIMs reference this security data (used when
-        * exporting images between WIMs) */
-       u32 refcnt;
 };
 
 /* Metadata for a WIM image */
 struct wim_image_metadata {
 
 };
 
 /* Metadata for a WIM image */
 struct wim_image_metadata {
 
+       unsigned long refcnt;
+
        /* Pointer to the root dentry of the image. */
        struct wim_dentry    *root_dentry;
 
        /* Pointer to the root dentry of the image. */
        struct wim_dentry    *root_dentry;
 
@@ -297,7 +295,7 @@ struct WIMStruct {
        struct wim_info *wim_info;
 
        /* Array of the image metadata, one for each image in the WIM. */
        struct wim_info *wim_info;
 
        /* Array of the image metadata, one for each image in the WIM. */
-       struct wim_image_metadata *image_metadata;
+       struct wim_image_metadata **image_metadata;
 
        /* The header of the WIM file. */
        struct wim_header hdr;
 
        /* The header of the WIM file. */
        struct wim_header hdr;
@@ -321,27 +319,34 @@ struct WIMStruct {
 
 /* Inline utility functions for WIMStructs. */
 
 
 /* Inline utility functions for WIMStructs. */
 
+static inline struct wim_image_metadata *
+wim_get_current_image_metadata(WIMStruct *w)
+{
+       return w->image_metadata[w->current_image - 1];
+}
+
+static inline const struct wim_image_metadata *
+wim_get_const_current_image_metadata(const WIMStruct *w)
+{
+       return w->image_metadata[w->current_image - 1];
+}
+
 static inline struct wim_dentry *
 wim_root_dentry(WIMStruct *w)
 {
 static inline struct wim_dentry *
 wim_root_dentry(WIMStruct *w)
 {
-       return w->image_metadata[w->current_image - 1].root_dentry;
+       return wim_get_current_image_metadata(w)->root_dentry;
 }
 
 static inline struct wim_security_data *
 wim_security_data(WIMStruct *w)
 {
 }
 
 static inline struct wim_security_data *
 wim_security_data(WIMStruct *w)
 {
-       return w->image_metadata[w->current_image - 1].security_data;
+       return wim_get_current_image_metadata(w)->security_data;
 }
 }
+
 static inline const struct wim_security_data *
 wim_const_security_data(const WIMStruct *w)
 {
 static inline const struct wim_security_data *
 wim_const_security_data(const WIMStruct *w)
 {
-       return w->image_metadata[w->current_image - 1].security_data;
-}
-
-static inline struct wim_image_metadata *
-wim_get_current_image_metadata(WIMStruct *w)
-{
-       return &w->image_metadata[w->current_image - 1];
+       return wim_get_const_current_image_metadata(w)->security_data;
 }
 
 /* Nonzero if a struct resource_entry indicates a compressed resource. */
 }
 
 /* Nonzero if a struct resource_entry indicates a compressed resource. */
@@ -358,11 +363,6 @@ exclude_path(const tchar *path, size_t path_len,
             const struct wimlib_capture_config *config,
             bool exclude_prefix);
 
             const struct wimlib_capture_config *config,
             bool exclude_prefix);
 
-extern int
-add_new_dentry_tree(WIMStruct *dest_wim, struct wim_dentry *root,
-                   struct wim_security_data *sd);
-
-
 /* extract_image.c */
 
 /* Internal use only */
 /* extract_image.c */
 
 /* Internal use only */
@@ -612,7 +612,21 @@ for_image(WIMStruct *w, int image, int (*visitor)(WIMStruct *));
 
 extern void
 destroy_image_metadata(struct wim_image_metadata *imd,
 
 extern void
 destroy_image_metadata(struct wim_image_metadata *imd,
-                      struct wim_lookup_table *lt);
+                      struct wim_lookup_table *table,
+                      bool free_metadata_lte);
+
+extern void
+put_image_metadata(struct wim_image_metadata *imd,
+                  struct wim_lookup_table *table);
+
+extern int
+append_image_metadata(WIMStruct *w, struct wim_image_metadata *imd);
+
+extern struct wim_image_metadata *
+new_image_metadata();
+
+extern struct wim_image_metadata **
+new_image_metadata_array(unsigned num_images);
 
 /* write.c */
 
 
 /* write.c */