From 87a8f29785bb605350821f1638a42e6cf3e49ce3 Mon Sep 17 00:00:00 2001 From: Will Newton Date: Thu, 31 Aug 2017 10:42:13 +0100 Subject: [PATCH 49/86] src/check.c: Fix up mtools created bad dir entries mtools writes uninitialized data to the case field of some directory entries. Running fsck.fat on these filesystems will cause the directory to get deleted which can lead to data loss. Detect this situation and clear the flag instead. mtools patch to fix the original issue: https://lists.gnu.org/archive/html/info-mtools/2014-08/msg00000.html Signed-off-by: Will Newton --- src/check.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/check.c b/src/check.c index a2a752f..f1e18be 100644 --- a/src/check.c +++ b/src/check.c @@ -495,6 +495,13 @@ static int handle_dot(DOS_FS * fs, DOS_FILE * file, int dots) break; } } + if (file->dir_ent.lcase & FAT_NO_83NAME) { + /* Some versions of mtools write these directory entries with random data in + this field. */ + printf("%s\n Is a dot with no 8.3 name flag set, clearing.\n", path_name(file)); + file->dir_ent.lcase &= ~FAT_NO_83NAME; + MODIFY(file, lcase, file->dir_ent.lcase); + } if (!dots) { printf("Root contains directory \"%s\". Dropping it.\n", name); drop_file(fs, file); -- 1.8.3.1