From 8bdc2890999c850519913be0e829e9ced979ac2f Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Fri, 2 Mar 2012 01:34:16 +0100 Subject: s3: Further fix for bug 8777 --- source3/configure.in | 41 ++++++++++++++++++++++++++++++++--------- source3/modules/vfs_default.c | 2 +- source3/smbd/statvfs.c | 4 ++-- 3 files changed, 35 insertions(+), 12 deletions(-) (limited to 'source3') 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 #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_MOUNT_H #include #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 #include - #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); -- cgit