]> wimlib.net Git - wimlib/blobdiff - src/lookup_table.h
Fixes
[wimlib] / src / lookup_table.h
index 9e082c77761b7b9bbd727201b80fd48672006518..4ec44cd394aab373a9ce9d6c6178aedec3019859 100644 (file)
@@ -23,6 +23,7 @@ struct lookup_table {
 
 struct wimlib_fd;
 
+
 /* An entry in the lookup table in the WIM file. */
 struct lookup_table_entry {
 
@@ -38,14 +39,14 @@ struct lookup_table_entry {
        /* Currently ignored; set to 1 in new lookup table entries. */
        u16 part_number;
 
-       /* Number of times this lookup table entry is referenced by dentries. */
-       u32 refcnt;
-
        /* If %true, this lookup table entry corresponds to a symbolic link
         * reparse buffer.  @symlink_reparse_data_buf will give the target of
         * the symbolic link. */
        bool is_symlink;
 
+       /* Number of times this lookup table entry is referenced by dentries. */
+       u32 refcnt;
+
        union {
                /* SHA1 hash of the file resource pointed to by this lookup
                 * table entry */
@@ -82,9 +83,11 @@ struct lookup_table_entry {
                        /* Compression type used in other WIM. */
                        int   other_wim_ctype;
                };
-               struct wimlib_fd **fds;
-               u16 num_allocated_fds;
-               u16 num_opened_fds;
+               struct {
+                       struct wimlib_fd **fds;
+                       u16 num_allocated_fds;
+                       u16 num_opened_fds;
+               };
        };
 
        /* When a WIM file is written, out_refcnt starts at 0 and is incremented
@@ -97,12 +100,10 @@ struct lookup_table_entry {
         *
         * output_resource_entry is the struct resource_entry for the position of the
         * file resource when written to the output file. */
-       union {
-               u32 out_refcnt;
-               bool refcnt_is_incremented;
-       };
+       u32 out_refcnt;
        struct resource_entry output_resource_entry;
-       struct dentry *hard_link_sets;
+       struct list_head lte_group_list;
+       struct list_head staging_list;
 };
 
 extern struct lookup_table *new_lookup_table(size_t capacity);
@@ -113,8 +114,12 @@ extern void lookup_table_insert(struct lookup_table *table,
 extern void lookup_table_unlink(struct lookup_table *table, 
                                struct lookup_table_entry *lte);
 
-extern bool lookup_table_decrement_refcnt(struct lookup_table* table, 
-                                         const u8 hash[]);
+extern struct lookup_table_entry *
+lookup_table_decrement_refcnt(struct lookup_table* table, const u8 hash[]);
+
+extern struct lookup_table_entry *
+lte_decrement_refcnt(struct lookup_table_entry *lte,
+                    struct lookup_table *table);
 
 
 extern struct lookup_table_entry *new_lookup_table_entry();
@@ -129,7 +134,7 @@ __lookup_resource(const struct lookup_table *lookup_table, const u8 hash[]);
 extern int lookup_resource(WIMStruct *w, const char *path,
                           int lookup_flags, struct dentry **dentry_ret,
                           struct lookup_table_entry **lte_ret,
-                          u8 **hash_ret);
+                          unsigned *stream_idx_ret);
 
 extern int zero_out_refcnts(struct lookup_table_entry *entry, void *ignore);
 
@@ -142,13 +147,10 @@ extern void free_lookup_table(struct lookup_table *table);
 
 extern int write_lookup_table_entry(struct lookup_table_entry *lte, void *__out);
 
-static inline void free_lookup_table_entry(struct lookup_table_entry *lte)
-{
-       if (lte) {
-               FREE(lte->file_on_disk);
-               FREE(lte);
-       }
-}
+extern void free_lookup_table_entry(struct lookup_table_entry *lte);
+
+extern void resolve_lookup_table_entries(struct dentry *root,
+                                        struct lookup_table *table);
 
 /* Writes the lookup table to the output file. */
 static inline int write_lookup_table(struct lookup_table *table, FILE *out)