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
/* 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;
* 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);
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();
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)
{