s3: Further fix for bug 8777
authorBrad Smith <brad@comstyle.com>
Fri, 2 Mar 2012 00:34:16 +0000 (01:34 +0100)
committerVolker Lendecke <vl@samba.org>
Fri, 2 Mar 2012 09:30:07 +0000 (10:30 +0100)
source3/configure.in
source3/modules/vfs_default.c
source3/smbd/statvfs.c

index 6c7c3b0..6269b4c 100644 (file)
@@ -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;
index d81adad..fd0ff0a 100644 (file)
@@ -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);
index 7265ee7..1e72a8e 100644 (file)
@@ -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);