From 9d307f54ca6d101a7adb5038ee4e96cc01b54b04 Mon Sep 17 00:00:00 2001 From: Derrell Lipman Date: Sat, 14 Feb 2009 16:11:50 -0500 Subject: [PATCH] It seems some systems use f_flags instead of f_flag. Use the appropriate one. (cherry picked from commit 3b12ab74252c850348c2d15adf930aa01e0652ff) --- source/configure.in | 18 ++++++++++++++++++ source/libsmb/libsmb_stat.c | 24 ++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/source/configure.in b/source/configure.in index c5189211e72..cfb97b5035b 100644 --- a/source/configure.in +++ b/source/configure.in @@ -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 +#include ],[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 +#include ],[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)]) diff --git a/source/libsmb/libsmb_stat.c b/source/libsmb/libsmb_stat.c index 38a44417564..b09afaca259 100644 --- a/source/libsmb/libsmb_stat.c +++ b/source/libsmb/libsmb_stat.c @@ -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; } -- 2.11.4.GIT