summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/configure.in41
-rw-r--r--source3/modules/vfs_default.c2
-rw-r--r--source3/smbd/statvfs.c4
3 files changed, 35 insertions, 12 deletions
diff --git a/source3/configure.in b/source3/configure.in
index 6c7c3b0969..6269b4c6d9 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -6834,25 +6834,48 @@ fi
CFLAGS=$CFLAGS_SAVE
-# Checks for the vfs_fileid module
+# Checks for *BSD bsd_statvfs() function
# Start
-AC_CHECK_FUNC(getmntent)
-
-AC_CHECK_HEADERS(sys/param.h sys/statfs.h sys/mount.h)
+AC_CHECK_HEADERS(sys/param.h sys/mount.h)
-AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
-AC_CACHE_VAL(vfsfileid_cv_statfs,[
+AC_MSG_CHECKING([bsd_statvfs: checking for statfs() and struct statfs.bsize])
+AC_CACHE_VAL(bsdstatvfs_cv_statfs,[
AC_TRY_RUN([
- #include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
#endif
- #ifdef HAVE_SYS_STATFS_H
+ int main (void)
+ {
+ struct statfs fsd;
+ fsd.f_bsize = 0;
+ exit (statfs (".", &fsd));
+ }],
+ bsdstatvfs_cv_statfs=yes,
+ bsdstatvfs_cv_statfs=no,
+ bsdstatvfs_cv_statfs=no)])
+AC_MSG_RESULT($bsdstatvfs_cv_statfs)
+
+if test $bsdstatvfs_cv_statfs = yes; then
+ AC_DEFINE(BSD_STATVFS_BSIZE,1,[Whether statfs exists and struct statfs has bsize property])
+fi
+
+# End
+# Checks for *BSD sys_statvfs() function
+
+# Checks for the vfs_fileid module
+# Start
+AC_CHECK_FUNC(getmntent)
+
+AC_CHECK_HEADERS(sys/statfs.h)
+
+AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid])
+AC_CACHE_VAL(vfsfileid_cv_statfs,[
+ AC_TRY_RUN([
+ #include <sys/types.h>
#include <sys/statfs.h>
- #endif
int main(void)
{
struct statfs fsd;
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index d81adadfec..fd0ff0aa71 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -111,7 +111,7 @@ static uint32_t vfswrap_fs_capabilities(struct vfs_handle_struct *handle,
NTSTATUS status;
int ret = -1;
-#if defined(DARWINOS) || (defined(BSD) && defined(MNT_RDONLY))
+#if defined(DARWINOS) || (defined(BSD) && defined(BSD_STATVFS_BSIZE))
struct vfs_statvfs_struct statbuf;
ZERO_STRUCT(statbuf);
sys_statvfs(conn->connectpath, &statbuf);
diff --git a/source3/smbd/statvfs.c b/source3/smbd/statvfs.c
index 7265ee74c6..1e72a8e48b 100644
--- a/source3/smbd/statvfs.c
+++ b/source3/smbd/statvfs.c
@@ -97,7 +97,7 @@ static int darwin_statvfs(const char *path, vfs_statvfs_struct *statbuf)
return 0;
}
-#elif defined(BSD) && defined(MNT_RDONLY)
+#elif defined(BSD) && defined(BSD_STATVFS_BSIZE)
static int bsd_statvfs(const char *path, vfs_statvfs_struct *statbuf)
{
struct statfs statfs_buf;
@@ -172,7 +172,7 @@ int sys_statvfs(const char *path, vfs_statvfs_struct *statbuf)
{
#if defined(DARWINOS)
return darwin_statvfs(path, statbuf);
-#elif defined(BSD) && defined(MNT_RDONLY)
+#elif defined(BSD) && defined(BSD_STATVFS_BSIZE)
return bsd_statvfs(path, statbuf);
#elif defined(STAT_STATVFS) && defined(HAVE_FSID_INT)
return linux_statvfs(path, statbuf);