+2009-04-11 Felix Zielcke <fzielcke@z-51.de>
+
+ * util/hostdisk.c [__FreeBSD_kernel__]: Include sys/disk.h.
+ (grub_util_biosdisk_open) [__FreeBSD_kernel__]: Add support for
+ GNU/kFreeBSD. Check if a device is a character device. Use
+ DIOCGMEDIASIZE to get the size.
+ (convert_system_partition_to_system_disk) [__FreeBSD_kernel__]: Add
+ support for GNU/kFreeBSD.
+ (grub_util_biosdisk_get_grub_dev) [__FreeBSD_kernel__]: Check if OS_DEV
+ is a character device instead of a block device. Add support for
+ FreeBSD device names.
+
+ * util/getroot.c (find_root_device) [__FreeBSD_kernel__]: Check if ENT
+ is a character device instead of a block device.
+
+ * util/grub-probe.c (probe) [__FreeBSD_kernel__]: Check if DEVICE_NAME
+ is a character device instead of a block device.
+
2009-04-11 Andrey Shuvikov <mr_hyro@yahoo.com>
* util/hostdisk.c [__FreeBSD__]: Include sys/disk.h.
# define FLOPPY_MAJOR 2
#endif
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
# include <sys/disk.h> /* DIOCGMEDIASIZE */
#endif
return GRUB_ERR_NONE;
}
-#elif defined(__linux__) || defined(__CYGWIN__) || defined(__FreeBSD__)
+#elif defined(__linux__) || defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
{
unsigned long long nr;
int fd;
if (fd == -1)
return grub_error (GRUB_ERR_BAD_DEVICE, "cannot open `%s' while attempting to get disk size", map[drive].device);
-# if defined(__FreeBSD__)
+# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
if (fstat (fd, &st) < 0 || ! S_ISCHR (st.st_mode))
# else
if (fstat (fd, &st) < 0 || ! S_ISBLK (st.st_mode))
goto fail;
}
-# if defined(__FreeBSD__)
+# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
if (ioctl (fd, DIOCGMEDIASIZE, &nr))
# else
if (ioctl (fd, BLKGETSIZE64, &nr))
path[8] = 0;
return path;
-#elif defined(__FreeBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
char *path = xstrdup (os_dev);
if (strncmp ("/dev/", path, 5) == 0)
{
return 0;
}
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
if (! S_ISCHR (st.st_mode))
#else
if (! S_ISBLK (st.st_mode))
return make_device_name (drive, dos_part, bsd_part);
}
-#elif defined(__FreeBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
/* FreeBSD uses "/dev/[a-z]+[0-9]+(s[0-9]+[a-z]?)?". */
{
int dos_part = -1;