bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] fsusage: fix block size returned on older Linux 2.6


From: Pádraig Brady
Subject: [PATCH] fsusage: fix block size returned on older Linux 2.6
Date: Tue, 15 May 2012 13:06:35 +0100

* lib/fsusage.c: Fall back to (struct statfs).f_frsize
which is available since Linux 2.6.
* m4/fsusage.m4 (STAT_STATFS2_FRSIZE): Always define
when the member is available so it can be used as a fallback.
---
 ChangeLog     |    9 +++++++++
 lib/fsusage.c |   11 ++++++++++-
 m4/fsusage.m4 |   31 +++++++++++++++++++++++++++++++
 3 files changed, 50 insertions(+), 1 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 12c39f6..e17cb95 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-05-15  Pádraig Brady  <address@hidden>
+
+       fsusage: fix block size returned on older Linux 2.6
+
+       * lib/fsusage.c: Fall back to (struct statfs).f_frsize
+       which is available since Linux 2.6.
+       * m4/fsusage.m4 (STAT_STATFS2_FRSIZE): Always define
+       when the member is available so it can be used as a fallback.
+
 2012-05-14  Paul Eggert  <address@hidden>
 
        bootstrap: suppress stderr chatter
diff --git a/lib/fsusage.c b/lib/fsusage.c
index 539f1a9..1e35d30 100644
--- a/lib/fsusage.c
+++ b/lib/fsusage.c
@@ -217,7 +217,16 @@ get_fs_usage (char const *file, char const *disk, struct 
fs_usage *fsp)
 
   fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_fsize);
 
-#elif defined STAT_STATFS2_BSIZE        /* glibc/Linux, 4.3BSD, SunOS 4, \
+#elif defined STAT_STATFS2_FRSIZE        /* 2.6 < glibc/Linux < 2.6.36 */
+
+  struct statfs fsd;
+
+  if (statfs (file, &fsd) < 0)
+    return -1;
+
+  fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_frsize);
+
+#elif defined STAT_STATFS2_BSIZE        /* glibc/Linux < 2.6, 4.3BSD, SunOS 4, 
\
                                            MacOS X < 10.4, FreeBSD < 5.0, \
                                            NetBSD < 3.0, OpenBSD < 4.4 */
 
diff --git a/m4/fsusage.m4 b/m4/fsusage.m4
index f87834e..90b41df 100644
--- a/m4/fsusage.m4
+++ b/m4/fsusage.m4
@@ -128,6 +128,37 @@ if test $ac_fsusage_space = no; then
   fi
 fi
 
+# Check for this unconditionally so we have a
+# good fallback on glibc/Linux > 2.6 < 2.6.36
+AC_MSG_CHECKING([for two-argument statfs with statfs.f_frsize member])
+AC_CACHE_VAL([fu_cv_sys_stat_statfs2_frsize],
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+  int
+  main ()
+  {
+  struct statfs fsd;
+  fsd.f_frsize = 0;
+  return statfs (".", &fsd) != 0;
+  }]])],
+  [fu_cv_sys_stat_statfs2_frsize=yes],
+  [fu_cv_sys_stat_statfs2_frsize=no],
+  [fu_cv_sys_stat_statfs2_frsize=no])])
+AC_MSG_RESULT([$fu_cv_sys_stat_statfs2_frsize])
+if test $fu_cv_sys_stat_statfs2_frsize = yes; then
+    AC_DEFINE([STAT_STATFS2_FRSIZE], [1],
+[  Define if statfs takes 2 args and struct statfs has a field named f_frsize.
+   (glibc/Linux > 2.6)])
+fi
+
 if test $ac_fsusage_space = no; then
   # glibc/Linux, MacOS X, FreeBSD < 5.0, NetBSD < 3.0, OpenBSD < 4.4.
   # (glibc/{Hurd,kFreeBSD}, FreeBSD >= 5.0, NetBSD >= 3.0,
-- 
1.7.6.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]