+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
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;
#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