[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: GRUB2: *BSD and more patch
From: |
Sergey Matveychuk |
Subject: |
Re: GRUB2: *BSD and more patch |
Date: |
Sat, 20 Mar 2004 03:45:31 +0300 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113 |
Marco Gerards wrote:
+ * util/i386/pc/biosdisk.c: Added headers for BSD.
Please say exactly what header files you are including.
OK.
+ (pupa_util_biosdisk_get_pupa_dev): Do not call
Please end a sentence with a ".".
It continue on next line. But I rewrite it anyway.
No need to notice the copyright update when changing years. It is
only required when changing the copyright holders (Correct me if I am
wrong).
May be you're right. I've removed it.
I do not see the configure.ac changes in the changelog entry. Same
for including config.h in misc.c.
I've missed it. Fixed.
-/* Define it to \"addr32\" or \"addr32;\" to make GAS happy */
+/* Define it to "addr32" or "addr32;" to make GAS happy */
Why are you doing this? I assume this is what the autotools
generated?
Yes, it was autoconf. I've removed it.
+#if !defined(__FreeBSD__)
if (! S_ISBLK (st.st_mode))
return make_device_name (drive, -1, -1);
+#endif
make_device_name does not have to be called at all?
As Okuji said checking for a block device make a little sence, I've
remove it at all.
-#elif defined(__GNU__)
- /* GNU uses "/dev/[hs]d[0-9]+(s[0-9]+[a-z]?)?". */
+#elif defined(__GNU__) || defined(__FreeBSD__) || defined(__NetBSD__) ||
defined(__OpenBSD__)
+ /* GNU uses "/dev/[ahsw]d[0-9]+(s[0-9]+[a-z]?)?". */
Is this comment correct? It says something about GNU, now you changed
the regexp. so it matches *BSD as well.
Yes. I've missed it too. Fixed.
--
Sem.
diff -ruNp grub2/ChangeLog grub2.test/ChangeLog
--- grub2/ChangeLog Fri Mar 19 23:55:21 2004
+++ grub2.test/ChangeLog Sat Mar 20 03:39:20 2004
@@ -1,3 +1,21 @@
+2004-03-15 Sergey Matveychuk <address@hidden>
+
+ * configure.ac: Added detection of malloc.h and memalign().
+ * util/i386/pc/biosdisk.c: Added sys/ioctl.h, sys/disklabel.h for
+ *BSD, sys/param.h for FreeBSD and sys/disk.h for FreeBSD 5.x.
+ (pupa_util_biosdisk_open): Added getting a device size for BSD.
+ (get_os_disk): Use code for __GNU__ for BSD too. Add recognizing of
+ 'ad' and 'wd' disk names. Change strchr() with strrchr() to fix
+ working with 'sd' disk names.
+ (pupa_util_biosdisk_get_pupa_dev): Remove call make_device_name()
+ if file is not a block device.
+ * util/i386/pc/getroot.c (find_root_device): Do not check for a block
+ device.
+ * util/misc.c: Include config.h. Include malloc.h only if it's needed.
+ (pupa_memalign): Change memalign() with malloc() where unavailable.
+ * util/pupa-emu.c: Include malloc.h only if it's needed.
+ (main): Move pupa_util_biosdisk_init() above pupa_guess_root_device().
+
2004-03-14 Jeroen Dekkers <address@hidden>
* Makefile.in: Update copyright.
diff -ruNp grub2/configure.ac grub2.test/configure.ac
--- grub2/configure.ac Fri Mar 19 23:55:24 2004
+++ grub2.test/configure.ac Sat Mar 20 01:40:52 2004
@@ -78,6 +78,9 @@ if test "x$default_CFLAGS" = xyes; then
fi
AC_SUBST(CFLAGS)
+AC_CHECK_HEADER(malloc.h)
+AC_CHECK_FUNC(memalign)
+
# Defined in aclocal.m4.
pupa_ASM_USCORE
pupa_CHECK_START_SYMBOL
diff -ruNp grub2/util/i386/pc/biosdisk.c grub2.test/util/i386/pc/biosdisk.c
--- grub2/util/i386/pc/biosdisk.c Sun Mar 14 20:48:25 2004
+++ grub2.test/util/i386/pc/biosdisk.c Sat Mar 20 03:19:49 2004
@@ -37,6 +37,17 @@
#include <errno.h>
#include <limits.h>
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+# include <sys/ioctl.h> /* ioctl */
+# include <sys/disklabel.h>
+# if defined(__FreeBSD__)
+# include <sys/param.h>
+# if __FreeBSD_version >= 500040
+# include <sys/disk.h>
+# endif
+# endif
+#endif /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ */
+
#ifdef __linux__
# include <sys/ioctl.h> /* ioctl */
# if !defined(__GLIBC__) || \
@@ -190,6 +201,47 @@ pupa_util_biosdisk_open (const char *nam
return PUPA_ERR_NONE;
}
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+ {
+ int fd;
+
+ fd = open (map[drive], O_RDONLY);
+ if (fd < 0)
+ return pupa_error (PUPA_ERR_BAD_DEVICE, "cannot open `%s'", map[drive]);
+
+ if (fstat (fd, &st) < 0)
+ {
+ close (fd);
+ goto fail;
+ }
+
+#if !defined(__FreeBSD__) || __FreeBSD_version < 500040
+ {
+ struct disklabel hdg;
+ if (ioctl (fd, DIOCGDINFO, &hdg))
+ goto fail;
+
+ disk->total_sectors = hdg.d_secperunit;
+ }
+#else
+ u_int secsize;
+ off_t mediasize;
+
+ if(ioctl(fd, DIOCGSECTORSIZE, &secsize) != 0)
+ secsize = 512;
+
+ if (ioctl(fd, DIOCGMEDIASIZE, &mediasize) != 0)
+ goto fail;
+
+ disk->total_sectors = mediasize / secsize;
+#endif
+
+ close (fd);
+ }
+
+ pupa_util_info ("the size of %s is %lu", name, disk->total_sectors);
+
+ return PUPA_ERR_NONE;
fail:
/* In GNU/Hurd, stat() will return the right size. */
@@ -659,11 +711,12 @@ get_os_disk (const char *os_dev)
return path;
-#elif defined(__GNU__)
+#elif defined(__GNU__) || defined(__FreeBSD__) || defined(__NetBSD__) ||
defined(__OpenBSD__)
path = xstrdup (os_dev);
- if (strncmp ("/dev/sd", path, 7) == 0 || strncmp ("/dev/hd", path, 7) == 0)
+ if (strncmp ("/dev/sd", path, 7) == 0 || strncmp ("/dev/hd", path, 7) == 0
+ || strncmp ("/dev/ad", path, 7) == 0 || strncmp ("/dev/wd", path, 7) == 0)
{
- p = strchr (path, 's');
+ p = strrchr (path, 's');
if (p)
*p = '\0';
}
@@ -716,9 +769,6 @@ pupa_util_biosdisk_get_pupa_dev (const c
return 0;
}
- if (! S_ISBLK (st.st_mode))
- return make_device_name (drive, -1, -1);
-
#if defined(__linux__)
/* Linux counts partitions uniformly, whether a BSD partition or a DOS
partition, so mapping them to PUPA devices is not trivial.
@@ -806,8 +856,9 @@ pupa_util_biosdisk_get_pupa_dev (const c
return make_device_name (drive, dos_part, bsd_part);
}
-#elif defined(__GNU__)
+#elif defined(__GNU__) || defined(__FreeBSD__) || defined(__NetBSD__) ||
defined(__OpenBSD__)
/* GNU uses "/dev/[hs]d[0-9]+(s[0-9]+[a-z]?)?". */
+ /* BSD uses "/dev/[aw]d[0-9]+(s[0-9]+[a-z]?)?". */
{
char *p;
int dos_part = -1;
diff -ruNp grub2/util/i386/pc/getroot.c grub2.test/util/i386/pc/getroot.c
--- grub2/util/i386/pc/getroot.c Sat Mar 13 16:59:25 2004
+++ grub2.test/util/i386/pc/getroot.c Sat Mar 20 01:40:52 2004
@@ -1,7 +1,7 @@
/* getroot.c - Get root device */
/*
* PUPA -- Preliminary Universal Programming Architecture for GRUB
- * Copyright (C) 1999,2000,2001,2002,2003 Free Software Foundation, Inc.
+ * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
*
* PUPA is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -177,8 +177,7 @@ find_root_device (const char *dir, dev_t
return res;
}
}
-
- if (S_ISBLK (st.st_mode) && st.st_rdev == dev)
+ if (st.st_rdev == dev)
{
/* Found! */
char *res;
diff -ruNp grub2/util/misc.c grub2.test/util/misc.c
--- grub2/util/misc.c Sat Mar 13 16:59:25 2004
+++ grub2.test/util/misc.c Sat Mar 20 02:23:44 2004
@@ -17,6 +17,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
@@ -24,7 +25,9 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/times.h>
+#ifdef HAVE_MALLOC_H
#include <malloc.h>
+#endif
#include <pupa/util/misc.h>
#include <pupa/mm.h>
@@ -194,7 +197,11 @@ pupa_memalign (pupa_size_t align, pupa_s
{
void *p;
+#ifdef HAVE_MEMALIGN
p = memalign (align, size);
+#else
+ p = malloc(size);
+#endif
if (! p)
pupa_util_error ("out of memory");
diff -ruNp grub2/util/pupa-emu.c grub2.test/util/pupa-emu.c
--- grub2/util/pupa-emu.c Sat Mar 13 16:59:25 2004
+++ grub2.test/util/pupa-emu.c Sat Mar 20 02:23:52 2004
@@ -18,7 +18,9 @@
*/
#include <stdlib.h>
+#ifdev HAVE_MALLOC_H
#include <malloc.h>
+#endif
#include <sys/stat.h>
#include <argp.h>
#include <string.h>
@@ -135,6 +137,8 @@ main (int argc, char *argv[])
argp_parse (&argp, argc, argv, 0, 0, &args);
+ /* XXX: This is a bit unportable. */
+ pupa_util_biosdisk_init (args.dev_map);
/* More sure there is a root device. */
if (! args.root_dev)
{
@@ -152,9 +156,6 @@ main (int argc, char *argv[])
pupa_env_set ("prefix", rootprefix);
- /* XXX: This is a bit unportable. */
- pupa_util_biosdisk_init (args.dev_map);
-
/* Initialize the default modules. */
pupa_fat_init ();
pupa_ext2_init ();
- GRUB2: *BSD and more patch, Sergey Matveychuk, 2004/03/18
- Re: GRUB2: *BSD and more patch, Yoshinori K. Okuji, 2004/03/18
- Re: GRUB2: *BSD and more patch, Sergey Matveychuk, 2004/03/19
- Re: GRUB2: *BSD and more patch, Johan Rydberg, 2004/03/19
- Re: GRUB2: *BSD and more patch, Marco Gerards, 2004/03/19
- Re: GRUB2: *BSD and more patch, Sergey Matveychuk, 2004/03/19
- Re: GRUB2: *BSD and more patch, Marco Gerards, 2004/03/19
- Re: GRUB2: *BSD and more patch, Sergey Matveychuk, 2004/03/19
- Re: GRUB2: *BSD and more patch, Marco Gerards, 2004/03/19
- Re: GRUB2: *BSD and more patch,
Sergey Matveychuk <=
- Re: GRUB2: *BSD and more patch, Jeroen Dekkers, 2004/03/20
- Re: GRUB2: *BSD and more patch, Sergey Matveychuk, 2004/03/20
- Re: GRUB2: *BSD and more patch, Marco Gerards, 2004/03/20
- Re: GRUB2: *BSD and more patch, Sergey Matveychuk, 2004/03/20
- Re: GRUB2: *BSD and more patch, Marco Gerards, 2004/03/20
- Re: GRUB2: *BSD and more patch, Sergey Matveychuk, 2004/03/20
- Re: GRUB2: *BSD and more patch, Marco Gerards, 2004/03/20
- Re: GRUB2: *BSD and more patch, Yoshinori K. Okuji, 2004/03/21
- Re: GRUB2: *BSD and more patch, Sergey Matveychuk, 2004/03/22
- Re: GRUB2: *BSD and more patch, Yoshinori K. Okuji, 2004/03/22