* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_floppy): New

function.
	* include/grub/emu/hostdisk.h (grub_util_biosdisk_is_floppy): New proto.
	* util/grub-setup.c (setup): Use grub_util_biosdisk_is_floppy.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-09-15 15:30:43 +02:00
parent 2b94e3ff6e
commit f00478b719
4 changed files with 36 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2010-09-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_floppy): New
function.
* include/grub/emu/hostdisk.h (grub_util_biosdisk_is_floppy): New proto.
* util/grub-setup.c (setup): Use grub_util_biosdisk_is_floppy.
2010-09-15 Yves Blusseau <blusseau@zetam.org>
Add function to get completions from usage.

View File

@ -1575,3 +1575,29 @@ grub_util_biosdisk_get_osdev (grub_disk_t disk)
{
return map[disk->id].device;
}
int
grub_util_biosdisk_is_floppy (grub_disk_t disk)
{
struct stat st;
int fd;
fd = open (map[disk->id].device, O_RDONLY);
/* Shouldn't happen. */
if (fd == -1)
return 0;
/* Shouldn't happen either. */
if (fstat (fd, &st) < 0)
return 0;
#if defined(__NetBSD__)
if (major(st.st_rdev) == RAW_FLOPPY_MAJOR)
return 1;
#endif
if (major(st.st_rdev) == FLOPPY_MAJOR)
return 1;
return 0;
}

View File

@ -27,5 +27,6 @@ void grub_util_biosdisk_fini (void);
char *grub_util_biosdisk_get_grub_dev (const char *os_dev);
const char *grub_util_biosdisk_get_osdev (grub_disk_t disk);
int grub_util_biosdisk_is_present (const char *name);
int grub_util_biosdisk_is_floppy (grub_disk_t disk);
#endif /* ! GRUB_BIOSDISK_MACHINE_UTIL_HEADER */

View File

@ -339,8 +339,8 @@ setup (const char *dir,
/* If DEST_DRIVE is a hard disk, enable the workaround, which is
for buggy BIOSes which don't pass boot drive correctly. Instead,
they pass 0x00 or 0x01 even when booted from 0x80. */
if (dest_dev->disk->id & 0x80)
/* Replace the jmp (2 bytes) with double nop's. */
if (!grub_util_biosdisk_is_floppy (dest_dev->disk))
/* Replace the jmp (2 bytes) with double nop's. */
*boot_drive_check = 0x9090;
}
#endif