void free_lookup_table_entry(struct lookup_table_entry *lte)
{
if (lte) {
-#ifdef WITH_FUSE
- if (lte->staging_list.next)
- list_del(<e->staging_list);
-#endif
switch (lte->resource_location) {
case RESOURCE_IN_STAGING_FILE:
case RESOURCE_IN_ATTACHED_BUFFER:
static void finalize_lte(struct lookup_table_entry *lte)
{
#ifdef WITH_FUSE
- if (lte->resource_location == RESOURCE_IN_STAGING_FILE)
+ if (lte->resource_location == RESOURCE_IN_STAGING_FILE) {
unlink(lte->staging_file_name);
+ wimlib_assert(lte->staging_list.next);
+ list_del(<e->staging_list);
+ }
#endif
free_lookup_table_entry(lte);
}
}
+int lte_zero_real_refcnt(struct lookup_table_entry *lte, void *ignore)
+{
+ lte->real_refcnt = 0;
+ return 0;
+}
+
+int lte_zero_out_refcnt(struct lookup_table_entry *lte, void *ignore)
+{
+ lte->out_refcnt = 0;
+ return 0;
+}
-int zero_out_refcnts(struct lookup_table_entry *entry, void *ignore)
+int lte_free_extracted_file(struct lookup_table_entry *lte, void *ignone)
{
- entry->out_refcnt = 0;
+ FREE(lte->extracted_file);
+ lte->extracted_file = NULL;
return 0;
}
return NULL;
}
+#ifdef WITH_FUSE
/*
* Finds the dentry, lookup table entry, and stream index for a WIM file stream,
* given a path name.
*stream_idx_ret = stream_idx;
return 0;
}
+#endif
-static int inode_resolve_ltes(struct inode *inode, struct lookup_table *table)
+static void inode_resolve_ltes(struct inode *inode, struct lookup_table *table)
{
struct lookup_table_entry *lte;
/* Resolve the alternate data streams */
for (u16 i = 0; i < inode->num_ads; i++) {
- struct ads_entry *cur_entry = inode->ads_entries[i];
-
+ struct ads_entry *cur_entry = &inode->ads_entries[i];
lte = __lookup_resource(table, cur_entry->hash);
cur_entry->lte = lte;
}
- return 0;
}
/* Resolve a dentry's lookup table entries
*/
int dentry_resolve_ltes(struct dentry *dentry, void *table)
{
- if (dentry->inode->resolved)
- return 0;
- else
- return inode_resolve_ltes(dentry->inode, table);
+ if (!dentry->inode->resolved)
+ inode_resolve_ltes(dentry->inode, table);
+ return 0;
}
-
-
-
-/* Return the lookup table entry for the unnamed data stream of a inode, or
+/* Return the lookup table entry for the unnamed data stream of an inode, or
* NULL if there is none.
*
* You'd think this would be easier than it actually is, since the unnamed data
* stream should be the one referenced from the inode itself. Alas, if there
* are named data streams, Microsoft's "imagex.exe" program will put the unnamed
- * data stream in one of the alternate data streams instead of inside the
- * inode. So we need to check the alternate data streams too.
+ * data stream in one of the alternate data streams instead of inside the WIM
+ * dentry itself. So we need to check the alternate data streams too.
*
- * Also, note that a inode may appear to have than one unnamed stream, but if
+ * Also, note that a dentry may appear to have than one unnamed stream, but if
* the SHA1 message digest is all 0's then the corresponding stream does not
* really "count" (this is the case for the inode's own file stream when the
* file stream that should be there is actually in one of the alternate stream