]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2010-09-10 Robert Millan <rmh@gnu.org>
authorRobert Millan <rmh@aybabtu.com>
Fri, 10 Sep 2010 12:02:54 +0000 (14:02 +0200)
committerRobert Millan <rmh@aybabtu.com>
Fri, 10 Sep 2010 12:02:54 +0000 (14:02 +0200)
* configure.ac: Check for `struct statfs.f_fstypename' and
`struct statfs.f_mntfromname'.

* grub-core/kern/emu/misc.c (grub_find_zpool_from_dir): Conditionalize
kFreeBSD-specific code.

ChangeLog
configure.ac
grub-core/kern/emu/misc.c

index fb6b19befff51f390c77de32ef70fa7f69df7d24..f2b1e9dcd1651ff7f01c7443ac44d78517f3bd7a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-09-10  Robert Millan  <rmh@gnu.org>
+
+       * configure.ac: Check for `struct statfs.f_fstypename' and
+       `struct statfs.f_mntfromname'.
+
+       * grub-core/kern/emu/misc.c (grub_find_zpool_from_dir): Conditionalize
+       kFreeBSD-specific code.
+
 2010-09-10  Robert Millan  <rmh@gnu.org>
 
        * util/grub.d/10_kfreebsd.in: Fix ${kfreebsd_device} initialization
index 57b9bb3acc215e8dc584bc718ad88b06efde4d2c..ec1ea8d88d7bf33d22f3962110e089cfcc000a0a 100644 (file)
@@ -280,6 +280,14 @@ fi
 AC_CHECK_FUNCS(posix_memalign memalign asprintf vasprintf)
 AC_CHECK_HEADERS(libzfs.h libnvpair.h sys/param.h sys/mount.h)
 
+AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
+#include <sys/param.h>
+#include <sys/mount.h>])
+
+AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default
+#include <sys/param.h>
+#include <sys/mount.h>])
+
 # For opendisk() and getrawpartition() on NetBSD.
 # Used in util/deviceiter.c and in util/hostdisk.c.
 AC_CHECK_HEADER([util.h], [
index 82f5796163a62903d78362a57df2c23406783d1b..db89f0eced21d8af2cfa640bfdf808ac86189a6a 100644 (file)
@@ -282,18 +282,26 @@ grub_get_libzfs_handle (void)
 void
 grub_find_zpool_from_dir (const char *dir, char **poolname, char **poolfs)
 {
-  struct statfs mnt;
   char *slash;
 
   *poolname = *poolfs = NULL;
 
-  if (statfs (dir, &mnt) != 0)
-    return;
+#if defined(HAVE_STRUCT_STATFS_F_FSTYPENAME) && defined(HAVE_STRUCT_STATFS_F_MNTFROMNAME)
+  /* FreeBSD and GNU/kFreeBSD.  */
+  {
+    struct statfs mnt;
+
+    if (statfs (dir, &mnt) != 0)
+      return;
 
-  if (strcmp (mnt.f_fstypename, "zfs") != 0)
-    return;
+    if (strcmp (mnt.f_fstypename, "zfs") != 0)
+      return;
 
-  *poolname = xstrdup (mnt.f_mntfromname);
+    *poolname = xstrdup (mnt.f_mntfromname);
+  }
+#else
+  return;
+#endif
 
   slash = strchr (*poolname, '/');
   if (slash)