X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fverify.c;h=d348e302b2d65edfc4ff29ed66e698d875c660ac;hb=9c7e852e60e96935beef11a28b0f010f7e24e863;hp=3e709767f2a5a80f98d131ec527a37598d17f449;hpb=c6eff1f0a0721331237030bdce4490bfafd436f7;p=wimlib diff --git a/src/verify.c b/src/verify.c index 3e709767..d348e302 100644 --- a/src/verify.c +++ b/src/verify.c @@ -45,20 +45,13 @@ verify_inode(struct wim_inode *inode, const WIMStruct *w) /* Check the security ID. -1 is valid and means "no security * descriptor". Anything else has to be a valid index into the WIM * image's security descriptors table. */ - if (inode->i_security_id < -1) { - ERROR("Dentry `%"TS"' has an invalid security ID (%d)", - dentry_full_path(first_dentry), inode->i_security_id); - return WIMLIB_ERR_INVALID_DENTRY; - } - - if (inode->i_security_id >= 0 && - inode->i_security_id >= sd->num_entries) + if (inode->i_security_id < -1 || + (inode->i_security_id >= 0 && + inode->i_security_id >= sd->num_entries)) { - ERROR("Dentry `%"TS"' has an invalid security ID (%d) " - "(there are only %u entries in the security table)", - dentry_full_path(first_dentry), inode->i_security_id, - sd->num_entries); - return WIMLIB_ERR_INVALID_DENTRY; + WARNING("\"%"TS"\" has an invalid security ID (%d)", + dentry_full_path(first_dentry), inode->i_security_id); + inode->i_security_id = -1; } /* Check that lookup table entries for all the inode's stream exist, @@ -92,9 +85,8 @@ verify_inode(struct wim_inode *inode, const WIMStruct *w) num_unnamed_streams++; } if (num_unnamed_streams > 1) { - ERROR("Dentry `%"TS"' has multiple (%u) un-named streams", - dentry_full_path(first_dentry), num_unnamed_streams); - return WIMLIB_ERR_INVALID_DENTRY; + WARNING("\"%"TS"\" has multiple (%u) un-named streams", + dentry_full_path(first_dentry), num_unnamed_streams); } /* Files cannot have multiple DOS names, even if they have multiple @@ -122,13 +114,6 @@ verify_inode(struct wim_inode *inode, const WIMStruct *w) } } - /* Directories with multiple links have not been tested. XXX */ - if (inode->i_nlink > 1 && inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY) { - ERROR("Hard-linked directory `%"TS"' is unsupported", - dentry_full_path(first_dentry)); - return WIMLIB_ERR_INVALID_DENTRY; - } - inode->i_verified = 1; return 0; } @@ -158,14 +143,13 @@ verify_dentry(struct wim_dentry *dentry, void *wim) * (This seems to be the case...) */ if (dentry_is_root(dentry)) { if (dentry_has_long_name(dentry) || dentry_has_short_name(dentry)) { - ERROR("The root dentry has a nonempty name!"); - return WIMLIB_ERR_INVALID_DENTRY; - } - } else { - if (!dentry_has_long_name(dentry)) { - ERROR("Dentry `%"TS"' has no long name!", - dentry_full_path(dentry)); - return WIMLIB_ERR_INVALID_DENTRY; + WARNING("The root dentry has a nonempty name"); + FREE(dentry->file_name); + FREE(dentry->short_name); + dentry->file_name = NULL; + dentry->short_name = NULL; + dentry->file_name_nbytes = 0; + dentry->short_name_nbytes = 0; } }