From: Eric Biggers Date: Sat, 31 May 2014 15:12:28 +0000 (-0500) Subject: inode_fixup.c: Fix check for directory hard links X-Git-Tag: v1.7.0~69 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=eb0e9745b807ac98d829f70265bb0516313fe86e inode_fixup.c: Fix check for directory hard links We shouldn't assume that the attributes are consistent, so we should check both ways for directory hard links. Specifically, in the case where the being-inserted dentry is not marked as a directory but for some reason it shares an inode number with a dentry marked as a directory, we want to detect that as a directory hard link. --- diff --git a/src/inode_fixup.c b/src/inode_fixup.c index 88a6b8e3..115779a4 100644 --- a/src/inode_fixup.c +++ b/src/inode_fixup.c @@ -85,7 +85,9 @@ inode_table_insert(struct wim_dentry *dentry, void *_params) params->num_inconsistent_inodes++; continue; } - if (unlikely(d_inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY)) { + if (unlikely((d_inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY) || + (inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY))) + { params->num_dir_hard_links++; if (params->num_dir_hard_links <= MAX_DIR_HARD_LINK_WARNINGS)