diff --git a/ChangeLog b/ChangeLog index 0f030b942..b47780c52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-03-15 Yoshinori K. Okuji + + * stage2/fsys_fat.c (fat_mount): Ignore the 3rd bit of a media + descriptor, because some BIOSes overwrite this value, according + to the storage mode (e.g. USB Floppy or USB HDD). + 2005-02-16 Yoshinori K. Okuji * grub/asmstub.c (grub_stage2): Remove the attribute `volatile' diff --git a/docs/grub.8 b/docs/grub.8 index fcd2fb913..577b44a45 100644 --- a/docs/grub.8 +++ b/docs/grub.8 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -.TH GRUB "8" "February 2005" "grub (GNU GRUB 0.96)" FSF +.TH GRUB "8" "March 2005" "grub (GNU GRUB 0.96)" FSF .SH NAME grub \- the grub shell .SH SYNOPSIS diff --git a/docs/mbchk.1 b/docs/mbchk.1 index e673c3c95..16b1a36a6 100644 --- a/docs/mbchk.1 +++ b/docs/mbchk.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -.TH MBCHK "1" "February 2005" "mbchk (GNU GRUB 0.96)" FSF +.TH MBCHK "1" "March 2005" "mbchk (GNU GRUB 0.96)" FSF .SH NAME mbchk \- check the format of a Multiboot kernel .SH SYNOPSIS diff --git a/stage2/fsys_fat.c b/stage2/fsys_fat.c index c97eb3c16..f40e658d9 100644 --- a/stage2/fsys_fat.c +++ b/stage2/fsys_fat.c @@ -1,6 +1,6 @@ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000, 2001 Free Software Foundation, Inc. + * Copyright (C) 2000,2001,2005 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -149,8 +149,7 @@ fat_mount (void) FAT_SUPER->clust_eof_marker = 0xff8; } } - - + /* Now do some sanity checks */ if (FAT_CVT_U16(bpb.bytes_per_sect) != (1 << FAT_SUPER->sectsize_bits) @@ -184,7 +183,11 @@ fat_mount (void) magic = 0x0f00; } - if (first_fat != (magic | bpb.media)) + /* Ignore the 3rd bit, because some BIOSes assigns 0xF0 to the media + descriptor, even if it is a so-called superfloppy (e.g. an USB key). + The check may be too strict for this kind of stupid BIOSes, as + they overwrite the media descriptor. */ + if ((first_fat | 0x8) != (magic | bpb.media | 0x8)) return 0; FAT_SUPER->cached_fat = - 2 * FAT_CACHE_SIZE;