]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
It seems some systems use f_flags instead of f_flag. Use the appropriate one.
authorDerrell Lipman <derrell.lipman@unwireduniverse.com>
Sat, 14 Feb 2009 21:11:50 +0000 (16:11 -0500)
committerDerrell Lipman <derrell.lipman@unwireduniverse.com>
Sat, 14 Feb 2009 21:11:50 +0000 (16:11 -0500)
source/configure.in
source/libsmb/libsmb_stat.c

index c5189211e72de1719ab825d1581d7eaee28f88e1..cfb97b5035b1a6d0b3730aa822a0313816af02ca 100644 (file)
@@ -5047,6 +5047,24 @@ if test x"$samba_cv_frsize" = x"yes"; then
     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
 fi
 
+# Some systems use f_flag in struct statvfs while others use f_flags
+AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
+    AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
+       samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
+if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
+    AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
+fi
+
+AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
+    AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
+       samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
+if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
+    AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
+fi
+
+
 if test $space = no; then
   # DEC Alpha running OSF/1
   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
index 38a44417564f1b2a442a6bfb473d23842c9cf550..b09afaca2594f12e9eb3b59aa790344905c8f70d 100644 (file)
@@ -363,6 +363,7 @@ SMBC_fstatvfs_ctx(SMBCCTX *context,
                   SMBCFILE *file,
                   struct statvfs *st)
 {
+        unsigned long flags = 0;
        uint32 fs_attrs = 0;
        struct cli_state *cli = file->srv->cli;
                 
@@ -398,15 +399,19 @@ SMBC_fstatvfs_ctx(SMBCCTX *context,
                         /* ... then provide it */
                         st->f_bsize =
                                 (unsigned long) bytes_per_sector;
+#if HAVE_FRSIZE
                         st->f_frsize =
                                 (unsigned long) sectors_per_allocation_unit;
+#else
+#warning "f_frsize field is not available"
+#endif
                         st->f_blocks =
                                 (fsblkcnt_t) total_allocation_units;
                         st->f_bfree =
                                 (fsblkcnt_t) actual_allocation_units;
                 }
 
-                st->f_flag |= SMBC_VFS_FEATURE_NO_UNIXCIFS;
+                flags |= SMBC_VFS_FEATURE_NO_UNIXCIFS;
         } else {
                 uint32 optimal_transfer_size;
                 uint32 block_size;
@@ -441,8 +446,13 @@ SMBC_fstatvfs_ctx(SMBCCTX *context,
                                 (fsfilcnt_t) total_file_nodes;
                         st->f_ffree =
                                 (fsfilcnt_t) free_file_nodes;
+#if HAVE_FSID_INT
                         st->f_fsid =
                                 (unsigned long) fs_identifier;
+#else
+#warning "f_fsid is not an integer type so is not available"
+                        /* We don't know the type, so don't try to set it */
+#endif
                         
                 }
         }
@@ -455,18 +465,24 @@ SMBC_fstatvfs_ctx(SMBCCTX *context,
                  * user-specified case sensitivity setting.
                  */
                 if (! smbc_getOptionCaseSensitive(context)) {
-                        st->f_flag |= SMBC_VFS_FEATURE_CASE_INSENSITIVE;
+                        flags |= SMBC_VFS_FEATURE_CASE_INSENSITIVE;
                 }
         } else {
                 if (! (fs_attrs & FILE_CASE_SENSITIVE_SEARCH)) {
-                        st->f_flag |= SMBC_VFS_FEATURE_CASE_INSENSITIVE;
+                        flags |= SMBC_VFS_FEATURE_CASE_INSENSITIVE;
                 }
         }
 
         /* See if DFS is supported */
        if ((cli->capabilities & CAP_DFS) &&  cli->dfsroot) {
-                st->f_flag |= SMBC_VFS_FEATURE_DFS;
+                flags |= SMBC_VFS_FEATURE_DFS;
         }
 
+#if HAVE_STATVFS_F_FLAG
+        st->f_flag = flags;
+#elif HAVE_STATVFS_F_FLAGS
+        st->f_flags = flags;
+#endif
+
         return 0;
 }