bug-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] misc *BSD fixes (device names, support for non-BSD userland)


From: Robert Millan
Subject: Re: [PATCH] misc *BSD fixes (device names, support for non-BSD userland)
Date: Mon, 28 Jul 2003 02:29:14 +0000
User-agent: Mutt/1.5.4i

Hi there,

Any comments on this patch? I sent it a week ago but haven't recieved
any response..

On Tue, Jul 22, 2003 at 06:57:25PM +0000, Robert Millan wrote:
> 
> Hi!
> 
> I made a patch with some *BSD related fixes:
> 
>  - Add compatibility for non-BSD systems using *BSD kernels (such as
>    GNU/FreeBSD). These don't define __*BSD__, but do define __*BSD_kernel__,
>    so i added compatibility defines in lib/device.c and then switch
>    from __*BSD__ to __*BSD_kernel__ (see the patch, it's self-explanatory)
>  - Devices for FreeBSD's kernel are outdated. Recent 5.x versions don't
>    add a "r" prefix to the device name, so it is now "fd%d", "ad%d", etc.
>    I'm adding a detection for __FreeBSD_kernel__'s version number.
> 
> My patch differed against pristine sources would conflict with my dynamic
> allocation one sent a while ago, so I'm differing against my patched version.
> 
> You need to apply my previous patch [1] before this one. If this is a problem
> tell me and i'll adapt my changes.
> 
> [1] http://mail.gnu.org/archive/html/bug-grub/2003-07/msg00055.html
> 
> -- 
> Robert Millan

> 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 <errno.h>
>  #include <limits.h>
>  
> +/* 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 <sys/ioctl.h>              /* ioctl */
>  # include <sys/disklabel.h>
>  # include <sys/cdio.h>               /* CDIOCCLRDEBUG */
> -#endif /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ */
> +#endif /* __FreeBSD_kernel__ || __NetBSD_kernel__ || __OpenBSD_kernel__ */
>  
>  #ifdef HAVE_OPENDISK
>  # include <util.h>
> @@ -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)

> _______________________________________________
> Bug-grub mailing list
> address@hidden
> http://mail.gnu.org/mailman/listinfo/bug-grub


-- 
Robert Millan

"[..] but the delight and pride of Aule is in the deed of making, and in the
thing made, and neither in possession nor in his own mastery; wherefore he
gives and hoards not, and is free from care, passing ever on to some new work."

 -- J.R.R.T, Ainulindale (Silmarillion)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]