/* Does this dentry need to be extracted? */
u8 needs_extraction : 1;
+ u8 not_extracted : 1;
+
/* Only used during NTFS capture */
u8 is_win32_name : 1;
- u8 not_extracted : 1;
+ /* Set to 1 if an inode has multiple DOS names. */
+ u8 dos_name_invalid : 1;
/* Temporary list */
struct list_head tmp_list;
}
/* Set DOS (short) name if given */
- if (dentry_has_short_name(dentry)) {
+ if (dentry_has_short_name(dentry) && !dentry->dos_name_invalid)
+ {
char *short_name_mbs;
size_t short_name_mbs_nbytes;
ret = utf16le_to_tstr(dentry->short_name,
inode_for_each_dentry(dentry, inode) {
if (dentry_has_short_name(dentry)) {
if (dentry_with_dos_name) {
+ /* This was previously an error, but if we
+ * capture a WIM from UDF on Windows, hard links
+ * are supported but DOS names are automatically
+ * generated for all names for an inode. */
+ #if 0
ERROR("Hard-linked file has a DOS name at "
"both `%"TS"' and `%"TS"'",
dentry_full_path(dentry_with_dos_name),
dentry_full_path(dentry));
return WIMLIB_ERR_INVALID_DENTRY;
+ #else
+ dentry->dos_name_invalid = 1;
+ #endif
}
dentry_with_dos_name = dentry;
}
return ret;
}
- if (dentry_has_short_name(dentry))
+ if (dentry_has_short_name(dentry) && !dentry->dos_name_invalid)
SetFileShortNameW(h, dentry->short_name);
else if (running_on_windows_7_or_later())
SetFileShortNameW(h, L"");