Added generic checks of MFT records in ntfsfix
Before acting on MFT, make sure it passes the consistency check.edge.strict_endians^2
							parent
							
								
									8adc9c6184
								
							
						
					
					
						commit
						5bdfac9704
					
				|  | @ -823,7 +823,8 @@ static BOOL short_mft_selfloc_condition(struct MFT_SELF_LOCATED *selfloc) | |||
| 			vol->mft_record_size, mft0) | ||||
| 				== vol->mft_record_size) | ||||
| 	    && !ntfs_mst_post_read_fixup((NTFS_RECORD*)mft0, | ||||
| 			vol->mft_record_size)) { | ||||
| 			vol->mft_record_size) | ||||
| 	    && !ntfs_mft_record_check(vol, 0, mft0)) { | ||||
| 		a = find_unnamed_attr(mft0,AT_DATA); | ||||
| 		if (a | ||||
| 		    && a->non_resident | ||||
|  | @ -961,7 +962,9 @@ static BOOL self_mapped_selfloc_condition(struct MFT_SELF_LOCATED *selfloc) | |||
| 	if ((ntfs_pread(vol->dev, offs, vol->mft_record_size, | ||||
| 			mft1) == vol->mft_record_size) | ||||
| 	    && !ntfs_mst_post_read_fixup((NTFS_RECORD*)mft1, | ||||
| 			vol->mft_record_size)) { | ||||
| 			vol->mft_record_size) | ||||
| 	    && !ntfs_mft_record_check(vol, inum, mft1)) { | ||||
| 
 | ||||
| 		lowest_vcn = (SELFLOC_LIMIT*vol->mft_record_size) | ||||
| 				>> vol->cluster_size_bits; | ||||
| 		a = find_unnamed_attr(mft1,AT_DATA); | ||||
|  | @ -1017,7 +1020,8 @@ static BOOL spare_record_selfloc_condition(struct MFT_SELF_LOCATED *selfloc) | |||
| 	if ((ntfs_pread(vol->dev, offs, vol->mft_record_size, | ||||
| 			mft2) == vol->mft_record_size) | ||||
| 	    && !ntfs_mst_post_read_fixup((NTFS_RECORD*)mft2, | ||||
| 			vol->mft_record_size)) { | ||||
| 			vol->mft_record_size) | ||||
| 	    && !ntfs_mft_record_check(vol, inum, mft2)) { | ||||
| 		if (!mft2->base_mft_record | ||||
| 		    && (mft2->flags & MFT_RECORD_IN_USE) | ||||
| 		    && !find_unnamed_attr(mft2,AT_ATTRIBUTE_LIST) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue