From 3c9fc981a2aa27a6b2456a7a8e68cd721dea8951 Mon Sep 17 00:00:00 2001 From: robertmh Date: Fri, 5 Sep 2003 01:36:58 +0000 Subject: [PATCH] * stage2/fsys_fat.c: Fix missdetection of ext2fs as fatfs. --- ChangeLog | 4 ++++ stage2/fsys_fat.c | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/ChangeLog b/ChangeLog index 83590d0a0..ae04c0f53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2003-09-05 KB Sriram + + * stage2/fsys_fat.c: Fix missdetection of ext2fs as fatfs. + 2003-09-05 Robert Millan * docs/menu.lst (GNU/Linux): Add commented initrd command, which is diff --git a/stage2/fsys_fat.c b/stage2/fsys_fat.c index 286d4a45f..c97eb3c16 100644 --- a/stage2/fsys_fat.c +++ b/stage2/fsys_fat.c @@ -67,6 +67,7 @@ int fat_mount (void) { struct fat_bpb bpb; + __u32 magic, first_fat; /* Check partition type for harddisk */ if (((current_drive & 0x80) || (current_slice != 0)) @@ -161,6 +162,31 @@ fat_mount (void) > FAT_SUPER->fat_length)) return 0; + /* kbs: Media check on first FAT entry [ported from PUPA] */ + + if (!devread(FAT_SUPER->fat_offset, 0, + sizeof(first_fat), (char *)&first_fat)) + return 0; + + if (FAT_SUPER->fat_size == 8) + { + first_fat &= 0x0fffffff; + magic = 0x0fffff00; + } + else if (FAT_SUPER->fat_size == 4) + { + first_fat &= 0x0000ffff; + magic = 0xff00; + } + else + { + first_fat &= 0x00000fff; + magic = 0x0f00; + } + + if (first_fat != (magic | bpb.media)) + return 0; + FAT_SUPER->cached_fat = - 2 * FAT_CACHE_SIZE; return 1; }