diff -ur grub.old/lib/device.c grub/lib/device.c --- grub.old/lib/device.c 2003-07-22 05:40:40.000000000 +0200 +++ grub/lib/device.c 2003-07-22 05:52:46.000000000 +0200 @@ -35,6 +35,15 @@ #include #include +/* compatibility for non-BSD systems using *BSD kernels */ +#if defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) +# define __FreeBSD_kernel__ __FreeBSD__ +#elif defined(__NetBSD__) && !defined(__NetBSD_kernel__) +# define __NetBSD_kernel__ __NetBSD__ +#elif defined(__OpenBSD__) && !defined(__OpenBSD_kernel__) +# define __OpenBSD_kernel__ __OpenBSD__ +#endif + #ifdef __linux__ # if !defined(__GLIBC__) || \ ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) @@ -71,11 +80,11 @@ # endif /* ! BLKGETSIZE */ #endif /* __linux__ */ -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) +#if defined(__FreeBSD_kernel__) || defined(__NetBSD_kernel__) || defined(__OpenBSD_kernel__) # include /* ioctl */ # include # include /* CDIOCCLRDEBUG */ -#endif /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ */ +#endif /* __FreeBSD_kernel__ || __NetBSD_kernel__ || __OpenBSD_kernel__ */ #ifdef HAVE_OPENDISK # include @@ -116,8 +125,8 @@ return; } -#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) - /* FreeBSD, NetBSD or OpenBSD */ +#elif defined(__FreeBSD_kernel__) || defined(__NetBSD_kernel__) || defined(__OpenBSD_kernel__) + /* kernel of FreeBSD, NetBSD or OpenBSD */ { struct disklabel hdg; if (ioctl (fd, DIOCGDINFO, &hdg)) @@ -199,15 +208,19 @@ #elif defined(__GNU__) /* GNU/Hurd */ asprintf (&name, "/dev/fd%d", unit); -#elif defined(__FreeBSD__) - /* FreeBSD */ +#elif defined(__FreeBSD_kernel__) + /* kernel of FreeBSD */ +# if __FreeBSD_kernel__ >= 5 + asprintf (&name, "/dev/fd%d", unit); +# else /* __FreeBSD_kernel__ <= 4 */ asprintf (&name, "/dev/rfd%d", unit); -#elif defined(__NetBSD__) - /* NetBSD */ +# endif /* __FreeBSD_kernel__ <= 4 */ +#elif defined(__NetBSD_kernel__) + /* kernel of NetBSD */ /* opendisk() doesn't work for floppies. */ asprintf (&name, "/dev/rfd%da", unit); -#elif defined(__OpenBSD__) - /* OpenBSD */ +#elif defined(__OpenBSD_kernel__) + /* kernel of OpenBSD */ asprintf (&name, "/dev/rfd%dc", unit); #elif defined(__QNXNTO__) /* QNX RTP */ @@ -230,15 +243,17 @@ #elif defined(__GNU__) /* GNU/Hurd */ asprintf (&name, "/dev/hd%d", unit); -#elif defined(__FreeBSD__) - /* FreeBSD */ -# if __FreeBSD__ >= 4 +#elif defined(__FreeBSD_kernel__) + /* kernel of FreeBSD */ +# if __FreeBSD_kernel__ >= 5 + asprintf (&name, "/dev/ad%d", unit); +# elif __FreeBSD_kernel__ >= 4 asprintf (&name, "/dev/rad%d", unit); -# else /* __FreeBSD__ <= 3 */ +# else /* __FreeBSD_kernel__ <= 3 */ asprintf (&name, "/dev/rwd%d", unit); -# endif /* __FreeBSD__ <= 3 */ -#elif defined(__NetBSD__) && defined(HAVE_OPENDISK) - /* NetBSD */ +# endif /* __FreeBSD_kernel__ <= 3 */ +#elif defined(__NetBSD_kernel__) && defined(HAVE_OPENDISK) + /* kernel of NetBSD */ char shortname[16]; int fd; name = malloc (16); // FIXME: can opendisk deal with dynamic buffers? @@ -249,8 +264,8 @@ 0 /* char device */ ); close (fd); -#elif defined(__OpenBSD__) - /* OpenBSD */ +#elif defined(__OpenBSD_kernel__) + /* kernel of OpenBSD */ asprintf (&name, "/dev/rwd%dc", unit); #elif defined(__QNXNTO__) /* QNX RTP */ @@ -275,11 +290,15 @@ #elif defined(__GNU__) /* GNU/Hurd */ asprintf (&name, "/dev/sd%d", unit); -#elif defined(__FreeBSD__) - /* FreeBSD */ +#elif defined(__FreeBSD_kernel__) + /* kernel of FreeBSD */ +# if __FreeBSD_kernel__ >= 5 + asprintf (&name, "/dev/da%d", unit); +# else /* __FreeBSD_kernel__ <= 4 */ asprintf (&name, "/dev/rda%d", unit); -#elif defined(__NetBSD__) && defined(HAVE_OPENDISK) - /* NetBSD */ +# endif /* __FreeBSD_kernel__ <= 4 */ +#elif defined(__NetBSD_kernel__) && defined(HAVE_OPENDISK) + /* kernel of NetBSD */ char shortname[16]; int fd; name = malloc (16); // FIXME: can opendisk deal with dynamic buffers? @@ -290,8 +309,8 @@ 0 /* char device */ ); close (fd); -#elif defined(__OpenBSD__) - /* OpenBSD */ +#elif defined(__OpenBSD_kernel__) + /* kernel of OpenBSD */ asprintf (&name, "/dev/rsd%dc", unit); #elif defined(__QNXNTO__) /* QNX RTP */ @@ -378,12 +397,12 @@ # endif /* ! CDROM_GET_CAPABILITY */ #endif /* __linux__ */ -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) +#if defined(__FreeBSD_kernel__) || defined(__NetBSD_kernel__) || defined(__OpenBSD_kernel__) # ifdef CDIOCCLRDEBUG if (ioctl (fileno (fp), CDIOCCLRDEBUG, 0) >= 0) return 0; # endif /* CDIOCCLRDEBUG */ -#endif /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ */ +#endif /* __FreeBSD_kernel__ || __NetBSD_kernel__ || __OpenBSD_kernel__ */ /* Attempt to read the first sector. */ if (fread (buf, 1, 512, fp) != 512)