diff options
author | Zach Loafman <zachary.loafman@isilon.com> | 2008-07-03 11:52:53 -0700 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2008-07-22 15:00:48 +0200 |
commit | 472519eb6941bc0972212cc416ab89801fe3ee0c (patch) | |
tree | 219bd63d7e367b5b54c8e09b02a349594306f84c | |
parent | abaa69b32b212f151832b5e5c9325bfeea7d0bb2 (diff) | |
download | samba-472519eb6941bc0972212cc416ab89801fe3ee0c.tar.gz samba-472519eb6941bc0972212cc416ab89801fe3ee0c.tar.bz2 samba-472519eb6941bc0972212cc416ab89801fe3ee0c.zip |
Check for f_frsize when using statvfs
Add a configure test for the availability of f_frsize in struct statvfs
(for broken platforms that define statvfs but still have
f_bsize/f_iosize). Also add sys/types.h to the other struct statvfs test
(again, some platforms need it).
(This used to be commit 591bf1d15ff3b93db908cc3a4b6e10d09e5b74b6)
-rw-r--r-- | source3/configure.in | 13 | ||||
-rw-r--r-- | source3/lib/fsusage.c | 5 |
2 files changed, 17 insertions, 1 deletions
diff --git a/source3/configure.in b/source3/configure.in index 0fe938764a..6806ed22ae 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -4755,12 +4755,23 @@ fi # This is not the case on ancient Linux systems. AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [ - AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0], + AC_TRY_COMPILE([#include <sys/types.h> +#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0], samba_cv_fsid_int=yes,samba_cv_fsid_int=no)]) if test x"$samba_cv_fsid_int" = x"yes"; then AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer]) fi +# fsusage.c assumes that statvfs has an f_frsize entry. Some weird +# systems use f_bsize. +AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [ + AC_TRY_COMPILE([#include <sys/types.h> +#include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0], + samba_cv_frsize=yes,samba_cv_frsize=no)]) +if test x"$samba_cv_frsize" = x"yes"; then + AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize 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/source3/lib/fsusage.c b/source3/lib/fsusage.c index c5dec5ee8d..66ffb9f442 100644 --- a/source3/lib/fsusage.c +++ b/source3/lib/fsusage.c @@ -122,8 +122,13 @@ int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) #endif /* STAT_STATFS4 */ #if defined(STAT_STATVFS) || defined(STAT_STATVFS64) /* SVR4 */ +#if defined HAVE_FRSIZE # define CONVERT_BLOCKS(B) \ adjust_blocks ((SMB_BIG_UINT)(B), fsd.f_frsize ? (SMB_BIG_UINT)fsd.f_frsize : (SMB_BIG_UINT)fsd.f_bsize, (SMB_BIG_UINT)512) +#else +# define CONVERT_BLOCKS(B) \ + adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_bsize, (SMB_BIG_UINT)512) +#endif #ifdef STAT_STATVFS64 struct statvfs64 fsd; |