summaryrefslogtreecommitdiff
path: root/lib/fsusage.c
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2012-05-15 12:52:36 +0100
committerPádraig Brady <P@draigBrady.com>2012-05-16 00:45:20 +0100
commitb1fac377605c0eef8844fc8d3818d360f37d6fa4 (patch)
tree86222f3596e42fb26ab5f8b49b2b009890ec54ef /lib/fsusage.c
parent4b43b0c056870b819bfa114bc62889c3e0ed8f2e (diff)
downloadgnulib-b1fac377605c0eef8844fc8d3818d360f37d6fa4.tar.gz
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. * doc/posix-functions/statvfs.texi: Mention the hang issue on Linux < 2.6.36.
Diffstat (limited to 'lib/fsusage.c')
-rw-r--r--lib/fsusage.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/fsusage.c b/lib/fsusage.c
index 539f1a9a8f..1e35d30e78 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 */