summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/bbackupd/BackupDaemon.cpp13
-rw-r--r--infrastructure/m4/ax_check_mount_point.m49
2 files changed, 18 insertions, 4 deletions
diff --git a/bin/bbackupd/BackupDaemon.cpp b/bin/bbackupd/BackupDaemon.cpp
index 01e5bf36..3152d82d 100644
--- a/bin/bbackupd/BackupDaemon.cpp
+++ b/bin/bbackupd/BackupDaemon.cpp
@@ -1170,7 +1170,7 @@ void BackupDaemon::SendSyncStartOrFinish(bool SendStart)
-#ifndef HAVE_STRUCT_STATFS_F_MNTONNAME
+#if !defined(HAVE_STRUCT_STATFS_F_MNTONNAME) && !defined(HAVE_STRUCT_STATVFS_F_NMTONNAME)
// string comparison ordering for when mount points are handled
// by code, rather than the OS.
typedef struct
@@ -1234,7 +1234,7 @@ void BackupDaemon::SetupLocations(BackupClientContext &rClientContext, const Con
int numIDMaps = 0;
#ifdef HAVE_MOUNTS
-#ifndef HAVE_STRUCT_STATFS_F_MNTONNAME
+#if !defined(HAVE_STRUCT_STATFS_F_MNTONNAME) && !defined(HAVE_STRUCT_STATVFS_F_MNTONNAME)
// Linux and others can't tell you where a directory is mounted. So we
// have to read the mount entries from /etc/mtab! Bizarre that the OS
// itself can't tell you, but there you go.
@@ -1308,7 +1308,7 @@ void BackupDaemon::SetupLocations(BackupClientContext &rClientContext, const Con
ASSERT(*i == "/");
}
#endif // n NDEBUG
-#endif // n HAVE_STRUCT_STATFS_F_MNTONNAME
+#endif // n HAVE_STRUCT_STATFS_F_MNTONNAME || n HAVE_STRUCT_STATVFS_F_MNTONNAME
#endif // HAVE_MOUNTS
// Then... go through each of the entries in the configuration,
@@ -1332,11 +1332,16 @@ TRACE0("new location\n");
// Do a fsstat on the pathname to find out which mount it's on
{
-#if defined HAVE_STRUCT_STATFS_F_MNTONNAME || defined WIN32
+#if defined HAVE_STRUCT_STATFS_F_MNTONNAME || defined HAVE_STRUCT_STATVFS_F_MNTONNAME || defined WIN32
// BSD style statfs -- includes mount point, which is nice.
+#ifdef HAVE_STRUCT_STATVFS_F_MNTONNAME
+ struct statvfs s;
+ if(::statvfs(ploc->mPath.c_str(), &s) != 0)
+#else // HAVE_STRUCT_STATVFS_F_MNTONNAME
struct statfs s;
if(::statfs(ploc->mPath.c_str(), &s) != 0)
+#endif // HAVE_STRUCT_STATVFS_F_MNTONNAME
{
THROW_EXCEPTION(CommonException, OSFileError)
}
diff --git a/infrastructure/m4/ax_check_mount_point.m4 b/infrastructure/m4/ax_check_mount_point.m4
index 8c843379..d26bf3e5 100644
--- a/infrastructure/m4/ax_check_mount_point.m4
+++ b/infrastructure/m4/ax_check_mount_point.m4
@@ -10,6 +10,7 @@ dnl HAVE_SYS_MOUNT_H
dnl HAVE_STRUCT_MNTENT_MNT_DIR
dnl HAVE_STRUCT_MNTTAB_MNT_MOUNTP
dnl HAVE_STRUCT_STATFS_F_MNTONNAME
+dnl HAVE_STRUCT_STATVFS_F_MNTONNAME
dnl Also ACTION-IF-TRUE and ACTION-IF-FALSE are run as appropriate
dnl
dnl @category C
@@ -33,6 +34,13 @@ AC_DEFUN([AX_CHECK_MOUNT_POINT], [
#endif
#include <sys/mount.h>
]])
+ # NetBSD
+ AC_CHECK_MEMBERS([struct statvfs.f_mntonname],,, [[
+ #ifdef HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif
+ #include <sys/mount.h>
+ ]])
# Linux
AC_CHECK_MEMBERS([struct mntent.mnt_dir],,, [[#include <mntent.h>]])
# Solaris
@@ -41,6 +49,7 @@ AC_DEFUN([AX_CHECK_MOUNT_POINT], [
#include <sys/mnttab.h>
]])
if test "x$ac_cv_member_struct_statfs_f_mntonname" = "xyes" || \
+ test "x$ac_cv_member_struct_statvfs_f_mntonname" = "xyes" || \
test "x$ac_cv_member_struct_mntent_mnt_dir" = "xyes" || \
test "x$ac_cv_member_struct_mnttab_mnt_mountp" = "xyes"
then