#ifdef WITH_FUSE
if (lte->resource_location == RESOURCE_IN_STAGING_FILE) {
unlink(lte->staging_file_name);
- wimlib_assert(lte->staging_list.next);
- wimlib_assert(lte->staging_list.prev);
list_del(<e->staging_list);
}
#endif
#ifdef WITH_FUSE
void lte_decrement_num_opened_fds(struct lookup_table_entry *lte)
{
- wimlib_assert(lte != NULL);
- if (lte->num_opened_fds != 0) {
+ if (lte->num_opened_fds != 0)
if (--lte->num_opened_fds == 0 && lte->refcnt == 0)
finalize_lte(lte);
- }
}
#endif
return 0;
}
-int lte_zero_extracted_file(struct lookup_table_entry *lte, void *ignore)
-{
- lte->extracted_file = NULL;
- return 0;
-}
-
int lte_free_extracted_file(struct lookup_table_entry *lte, void *ignore)
{
if (lte->extracted_file != NULL) {
}
#endif
-void inode_resolve_ltes(struct inode *inode, struct lookup_table *table)
-{
- struct lookup_table_entry *lte;
-
- wimlib_assert(!inode->resolved);
-
- /* Resolve the default file stream */
- lte = __lookup_resource(table, inode->hash);
- inode->lte = lte;
- inode->resolved = true;
-
- /* Resolve the alternate data streams */
- for (u16 i = 0; i < inode->num_ads; i++) {
- struct ads_entry *cur_entry = &inode->ads_entries[i];
- lte = __lookup_resource(table, cur_entry->hash);
- cur_entry->lte = lte;
- }
-}
-
-static void inode_unresolve_ltes(struct inode *inode)
-{
- wimlib_assert(inode->resolved);
- if (inode->lte)
- copy_hash(inode->hash, inode->lte->hash);
- else
- zero_out_hash(inode->hash);
-
- for (u16 i = 0; i < inode->num_ads; i++) {
- if (inode->ads_entries[i].lte)
- copy_hash(inode->ads_entries[i].hash,
- inode->ads_entries[i].lte->hash);
- else
- zero_out_hash(inode->ads_entries[i].hash);
- }
- inode->resolved = false;
-}
-
-/* Resolve a dentry's lookup table entries
+/* Resolve an inode's lookup table entries
*
* This replaces the SHA1 hash fields (which are used to lookup an entry in the
* lookup table) with pointers directly to the lookup table entries. A circular
* This function always succeeds; unresolved lookup table entries are given a
* NULL pointer.
*/
-int dentry_resolve_ltes(struct dentry *dentry, void *table)
+void inode_resolve_ltes(struct inode *inode, struct lookup_table *table)
{
- if (!dentry->d_inode->resolved)
- inode_resolve_ltes(dentry->d_inode, table);
- return 0;
+
+ if (!inode->resolved) {
+ struct lookup_table_entry *lte;
+ /* Resolve the default file stream */
+ lte = __lookup_resource(table, inode->hash);
+ inode->lte = lte;
+ inode->resolved = 1;
+
+ /* Resolve the alternate data streams */
+ for (u16 i = 0; i < inode->num_ads; i++) {
+ struct ads_entry *cur_entry = &inode->ads_entries[i];
+ lte = __lookup_resource(table, cur_entry->hash);
+ cur_entry->lte = lte;
+ }
+ }
}
-int dentry_unresolve_ltes(struct dentry *dentry, void *ignore)
+void inode_unresolve_ltes(struct inode *inode)
{
- if (dentry->d_inode->resolved)
- inode_unresolve_ltes(dentry->d_inode);
- return 0;
+ if (inode->resolved) {
+ if (inode->lte)
+ copy_hash(inode->hash, inode->lte->hash);
+ else
+ zero_out_hash(inode->hash);
+
+ for (u16 i = 0; i < inode->num_ads; i++) {
+ if (inode->ads_entries[i].lte)
+ copy_hash(inode->ads_entries[i].hash,
+ inode->ads_entries[i].lte->hash);
+ else
+ zero_out_hash(inode->ads_entries[i].hash);
+ }
+ inode->resolved = 0;
+ }
}
/*