lte_group_size++;
if (lte_group_size > lte->refcnt) {
#ifdef ENABLE_ERROR_MESSAGES
- ERROR("The following lookup table entry has a reference count "
+ struct dentry *example_dentry;
+ struct list_head *next;
+ struct stream_list_head *head;
+ WARNING("The following lookup table entry has a reference count "
"of %u, but", lte->refcnt);
- ERROR("We found %u references to it", lte_group_size);
+ WARNING("We found %u references to it", lte_group_size);
+ next = lte->lte_group_list.next;
+ head = container_of(next, struct stream_list_head, list);
+ if (head->type == STREAM_TYPE_NORMAL) {
+ example_dentry = container_of(head, struct dentry,
+ lte_group_list);
+ WARNING("(One dentry referencing it is at `%s')",
+ example_dentry->full_path_utf8);
+ }
print_lookup_table_entry(lte);
#endif
+ /* Guess what! install.wim for Windows 8 contains a stream with
+ * 2 dentries referencing it, but the lookup table entry has
+ * reference count of 1. So we will need to handle this case
+ * and not just make it be an error... I'm just setting the
+ * reference count to the number of references we found. */
+
+ #if 1
+ lte->refcnt = lte_group_size;
+ WARNING("Fixing reference count");
+ #else
return WIMLIB_ERR_INVALID_DENTRY;
+ #endif
}
return 0;
}
char orig;
ntfs_volume *vol = (*dir_ni_p)->vol;
- DEBUG("pre-applying DOS name `%s'", dentry_with_dos_name);
+ DEBUG("pre-applying DOS name `%s'",
+ dentry_with_dos_name->full_path_utf8);
ret = do_wim_apply_dentry_ntfs(dentry_with_dos_name,
*dir_ni_p, w);
if (ret != 0)
if (other->extracted_file) {
ret = wim_apply_hardlink_ntfs(dentry, other,
dir_ni, &ni);
+ is_hardlink = true;
if (ret != 0)
- return ret;
+ goto out_close_dir_ni;
+ else
+ goto out_set_dos_name;
}
}
/* Can't make a hard link */