change the check for a Windows partition in chainloader_func, to fix the problem that GRUB cannot be compiled, if FAT support is disabled.

This commit is contained in:
okuji 2001-02-27 13:17:40 +00:00
parent e85272f436
commit 1372bfd60a
3 changed files with 11 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2001-02-27 OKUJI Yoshinori <okuji@gnu.org>
* stage2/builtins.c (chainloader_func): Don't check if the
current partition is FAT, but check if it has a FAT partition
type and the BPB has a system id starting with "MSWIN".
2001-02-27 OKUJI Yoshinori <okuji@gnu.org>
Added hercules support based on a patch by Frank Mehnert

View file

@ -448,12 +448,10 @@ chainloader_func (char *arg, int flags)
grub_close ();
kernel_type = KERNEL_TYPE_CHAINLOADER;
/* XXX: Windows evil hack. I don't know why, but Windows seems not to
set the start address of an extended partition in the BPB correctly.
So this is necessary to make Windows bootable even with an extended
partition. Maybe this should be made only for Windows, but how can
we determine if it is Windows or not precisely?! */
if (open_partition () && fat_mount ())
/* XXX: Windows evil hack. For now, only the first five letters are
checked. */
if (IS_PC_SLICE_TYPE_FAT (current_slice)
&& ! grub_memcmp (BOOTSEC_LOCATION + BOOTSEC_BPB_SYSTEM_ID, "MSWIN", 5))
*((unsigned long *) (BOOTSEC_LOCATION + BOOTSEC_BPB_HIDDEN_SECTORS))
= part_start;

View file

@ -175,6 +175,7 @@ extern char *grub_scratch_mem;
#define BOOTSEC_SIGNATURE 0xAA55
#define BOOTSEC_BPB_OFFSET 0x3
#define BOOTSEC_BPB_LENGTH 0x3B
#define BOOTSEC_BPB_SYSTEM_ID 0x3
#define BOOTSEC_BPB_HIDDEN_SECTORS 0x1C
#define BOOTSEC_PART_OFFSET 0x1BE
#define BOOTSEC_PART_LENGTH 0x40