diff options
author | Martin Ebourne <martin@ebourne.me.uk> | 2006-02-23 01:56:02 +0000 |
---|---|---|
committer | Martin Ebourne <martin@ebourne.me.uk> | 2006-02-23 01:56:02 +0000 |
commit | a167a7dc42bd3765fe77b615a1226b4a0c3f6731 (patch) | |
tree | c53dedb531e1db2d771abe0b670cbc842c747654 | |
parent | 5839c5a7fc2d84cb544cd372707dc2fa21f2f074 (diff) |
Patch from Per Thomsen to detect statvfs. This is used by recent versions of NetBSD in preference to statfs.
-rw-r--r-- | bin/bbackupd/BackupDaemon.cpp | 13 | ||||
-rw-r--r-- | infrastructure/m4/ax_check_mount_point.m4 | 9 |
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 |