]> wimlib.net Git - wimlib/blobdiff - src/lookup_table.h
Various cleanups
[wimlib] / src / lookup_table.h
index df780a09e8ede3540fb5cf7a892d55a3f5165147..7d8474f68f0a8598ca1ea81c3dce3e6267bd8a9f 100644 (file)
@@ -23,7 +23,15 @@ struct lookup_table {
 
 struct wimlib_fd;
 
-/* An entry in the lookup table in the WIM file. */
+
+/* 
+ * An entry in the lookup table in the WIM file. 
+ *
+ * It is used to find data streams for files in the WIM. 
+ *
+ * The lookup_table_entry for a given dentry in the WIM is found using the SHA1
+ * message digest field. 
+ */
 struct lookup_table_entry {
 
        /* The next struct lookup_table_entry in the hash bucket.  NULL if this is the
@@ -82,7 +90,10 @@ struct lookup_table_entry {
                        /* Compression type used in other WIM. */
                        int   other_wim_ctype;
                };
-               struct {
+
+               struct { /* Used for wimlib_mount */
+
+                       /* File descriptors table for this data stream */
                        struct wimlib_fd **fds;
                        u16 num_allocated_fds;
                        u16 num_opened_fds;
@@ -100,11 +111,19 @@ 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. */
        u32 out_refcnt;
-       union {
-               struct resource_entry output_resource_entry;
-               struct list_head staging_list;
-       };
-       struct dentry *hard_link_sets;
+       struct resource_entry output_resource_entry;
+
+       /* Circular linked list of streams that share the same lookup table
+        * entry
+        * 
+        * This list of streams may include streams from different hard link
+        * sets that happen to be the same.  */
+       struct list_head lte_group_list;
+
+       /* List of lookup table entries that correspond to streams that have
+        * been extracted to the staging directory when modifying a read-write
+        * mounted WIM. */
+       struct list_head staging_list;
 };
 
 extern struct lookup_table *new_lookup_table(size_t capacity);
@@ -118,6 +137,10 @@ extern void lookup_table_unlink(struct lookup_table *table,
 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();
 
@@ -146,6 +169,8 @@ extern int write_lookup_table_entry(struct lookup_table_entry *lte, void *__out)
 
 extern void free_lookup_table_entry(struct lookup_table_entry *lte);
 
+extern int dentry_resolve_ltes(struct dentry *dentry, void *__table);
+
 /* Writes the lookup table to the output file. */
 static inline int write_lookup_table(struct lookup_table *table, FILE *out)
 {