diff options
author | Jim Meyering <jim@meyering.net> | 1995-10-01 18:23:29 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1995-10-01 18:23:29 +0000 |
commit | 4de6eab547881a9e3c2931dfe282eb963ce4eb0c (patch) | |
tree | f055766322c6e1e4cd53b7c85e566e0a707175fa | |
parent | caa2df2274f224e0feaa8a8579ad48dcbd2e2606 (diff) | |
download | coreutils-4de6eab547881a9e3c2931dfe282eb963ce4eb0c.tar.xz |
(get_fs_usage) [STATFS_TRUNCATES_BLOCK_COUNTS]: Copy untruncated block
counts from f_spare array into proper members of struct statfs.
From Eirik Fuller (eirik@netapp.com);
-rw-r--r-- | lib/fsusage.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/fsusage.c b/lib/fsusage.c index 2c1c7f0e2..0296e7e0b 100644 --- a/lib/fsusage.c +++ b/lib/fsusage.c @@ -144,6 +144,21 @@ get_fs_usage (path, disk, fsp) if (statfs (path, &fsd) < 0) return -1; + +#ifdef STATFS_TRUNCATES_BLOCK_COUNTS + /* In SunOS 4.1.2, 4.1.3, and 4.1.3_U1, the block counts in the + struct statfs are truncated to 2GB. These conditions detect that + truncation, presumably without botching the 4.1.1 case, in which + the values are not truncated. The correct counts are stored in + undocumented spare fields. */ + if (fsd.f_blocks == 0x1fffff && fsd.f_spare[0] > 0) + { + fsd.f_blocks = fsd.f_spare[0]; + fsd.f_bfree = fsd.f_spare[1]; + fsd.f_bavail = fsd.f_spare[2]; + } +#endif /* STATFS_TRUNCATES_BLOCK_COUNTS */ + #define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_bsize, 512) #endif |