annotate lib/fsusage.c @ 439:a9015d648b2e

No longer include safe-l?stat.h.
author Jim Meyering <jim@meyering.net>
date Fri, 19 May 1995 15:23:18 +0000
parents defe7888e2f3
children 3b80433a4e28
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* fsusage.c -- return space usage of mounted filesystems
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
2 Copyright (C) 1991, 1992 Free Software Foundation, Inc.
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 any later version.
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 GNU General Public License for more details.
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15 along with this program; if not, write to the Free Software
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17
105
12f81400139d merge with 3.8.3b
Jim Meyering <jim@meyering.net>
parents: 104
diff changeset
18 #ifdef HAVE_CONFIG_H
12f81400139d merge with 3.8.3b
Jim Meyering <jim@meyering.net>
parents: 104
diff changeset
19 #include <config.h>
12f81400139d merge with 3.8.3b
Jim Meyering <jim@meyering.net>
parents: 104
diff changeset
20 #endif
12f81400139d merge with 3.8.3b
Jim Meyering <jim@meyering.net>
parents: 104
diff changeset
21
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22 #include <sys/types.h>
338
815155102500 merge with 3.9s
Jim Meyering <jim@meyering.net>
parents: 325
diff changeset
23 #include <sys/stat.h>
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24 #include "fsusage.h"
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 int statfs ();
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
28 #ifdef HAVE_SYS_PARAM_H
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
29 #include <sys/param.h>
76
7031c61568a0 merge with 3.4.7
Jim Meyering <jim@meyering.net>
parents: 40
diff changeset
30 #endif
7031c61568a0 merge with 3.4.7
Jim Meyering <jim@meyering.net>
parents: 40
diff changeset
31
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
32 #ifdef HAVE_SYS_MOUNT_H
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 #include <sys/mount.h>
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
36 #ifdef HAVE_SYS_VFS_H
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
37 #include <sys/vfs.h>
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
38 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
40 #ifdef HAVE_SYS_FILSYS_H
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
41 #include <sys/filsys.h> /* SVR2. */
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
42 #endif
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
43
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
44 #ifdef HAVE_FCNTL_H
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 #include <fcntl.h>
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
48 #ifdef HAVE_SYS_STATFS_H
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 #include <sys/statfs.h>
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
52 #ifdef HAVE_DUSTAT_H /* AIX PS/2. */
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 #include <sys/dustat.h>
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
56 #ifdef HAVE_SYS_STATVFS_H /* SVR4. */
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 #include <sys/statvfs.h>
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 int statvfs ();
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60
385
f4cb6bbc01d4 (get_fs_usage, statfs): Use safe_read, and safe_stat rather than
Jim Meyering <jim@meyering.net>
parents: 339
diff changeset
61 int safe_read ();
f4cb6bbc01d4 (get_fs_usage, statfs): Use safe_read, and safe_stat rather than
Jim Meyering <jim@meyering.net>
parents: 339
diff changeset
62
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
63 /* Return the number of TOSIZE-byte blocks used by
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
64 BLOCKS FROMSIZE-byte blocks, rounding away from zero.
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
65 TOSIZE must be positive. Return -1 if FROMSIZE is not positive. */
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
66
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
67 static long
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
68 adjust_blocks (blocks, fromsize, tosize)
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
69 long blocks;
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
70 int fromsize, tosize;
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
71 {
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
72 if (tosize <= 0)
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
73 abort ();
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
74 if (fromsize <= 0)
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
75 return -1;
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
76
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
77 if (fromsize == tosize) /* E.g., from 512 to 512. */
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
78 return blocks;
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
79 else if (fromsize > tosize) /* E.g., from 2048 to 512. */
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
80 return blocks * (fromsize / tosize);
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
81 else /* E.g., from 256 to 512. */
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
82 return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize);
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
83 }
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
84
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
85 /* Fill in the fields of FSP with information about space usage for
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86 the filesystem on which PATH resides.
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87 DISK is the device on which PATH is mounted, for space-getting
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
88 methods that need to know it.
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89 Return 0 if successful, -1 if not. */
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
90
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
91 int
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
92 get_fs_usage (path, disk, fsp)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
93 char *path, *disk;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
94 struct fs_usage *fsp;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
95 {
120
3351d0fb3162 merge with 3.8.3e
Jim Meyering <jim@meyering.net>
parents: 105
diff changeset
96 #if defined (STAT_STATFS3_OSF1)
76
7031c61568a0 merge with 3.4.7
Jim Meyering <jim@meyering.net>
parents: 40
diff changeset
97 struct statfs fsd;
7031c61568a0 merge with 3.4.7
Jim Meyering <jim@meyering.net>
parents: 40
diff changeset
98
7031c61568a0 merge with 3.4.7
Jim Meyering <jim@meyering.net>
parents: 40
diff changeset
99 if (statfs (path, &fsd, sizeof (struct statfs)) != 0)
196
Jim Meyering <jim@meyering.net>
parents: 193
diff changeset
100 return -1;
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
101 #define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_fsize, 512)
120
3351d0fb3162 merge with 3.8.3e
Jim Meyering <jim@meyering.net>
parents: 105
diff changeset
102 #endif /* STAT_STATFS3_OSF1 */
76
7031c61568a0 merge with 3.4.7
Jim Meyering <jim@meyering.net>
parents: 40
diff changeset
103
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
104 #ifdef STAT_STATFS2_FS_DATA /* Ultrix. */
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
105 struct fs_data fsd;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
106
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
107 if (statfs (path, &fsd) != 1)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
108 return -1;
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
109 #define CONVERT_BLOCKS(b) adjust_blocks ((b), 1024, 512)
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
110 fsp->fsu_blocks = CONVERT_BLOCKS (fsd.fd_req.btot);
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
111 fsp->fsu_bfree = CONVERT_BLOCKS (fsd.fd_req.bfree);
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
112 fsp->fsu_bavail = CONVERT_BLOCKS (fsd.fd_req.bfreen);
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
113 fsp->fsu_files = fsd.fd_req.gtot;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
114 fsp->fsu_ffree = fsd.fd_req.gfree;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
115 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
116
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
117 #ifdef STAT_READ_FILSYS /* SVR2. */
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
118 #ifndef SUPERBOFF
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
119 #define SUPERBOFF (SUPERB * 512)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
120 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
121 struct filsys fsd;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
122 int fd;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
123
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
124 fd = open (disk, O_RDONLY);
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
125 if (fd < 0)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
126 return -1;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
127 lseek (fd, (long) SUPERBOFF, 0);
385
f4cb6bbc01d4 (get_fs_usage, statfs): Use safe_read, and safe_stat rather than
Jim Meyering <jim@meyering.net>
parents: 339
diff changeset
128 if (safe_read (fd, (char *) &fsd, sizeof fsd) != sizeof fsd)
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
129 {
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
130 close (fd);
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
131 return -1;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
132 }
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
133 close (fd);
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
134 #define CONVERT_BLOCKS(b) adjust_blocks ((b), (fsd.s_type == Fs2b ? 1024 : 512), 512)
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
135 fsp->fsu_blocks = CONVERT_BLOCKS (fsd.s_fsize);
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
136 fsp->fsu_bfree = CONVERT_BLOCKS (fsd.s_tfree);
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
137 fsp->fsu_bavail = CONVERT_BLOCKS (fsd.s_tfree);
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
138 fsp->fsu_files = (fsd.s_isize - 2) * INOPB * (fsd.s_type == Fs2b ? 2 : 1);
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
139 fsp->fsu_ffree = fsd.s_tinode;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
140 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
141
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
142 #ifdef STAT_STATFS2_BSIZE /* 4.3BSD, SunOS 4, HP-UX, AIX. */
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
143 struct statfs fsd;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
144
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
145 if (statfs (path, &fsd) < 0)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
146 return -1;
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
147 #define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_bsize, 512)
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
148 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
149
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
150 #ifdef STAT_STATFS2_FSIZE /* 4.4BSD. */
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
151 struct statfs fsd;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
152
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
153 if (statfs (path, &fsd) < 0)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
154 return -1;
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
155 #define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_fsize, 512)
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
156 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
157
339
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
158 #ifdef STAT_STATFS4 /* SVR3, Dynix, Irix, AIX. */
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
159 struct statfs fsd;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
160
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
161 if (statfs (path, &fsd, sizeof fsd, 0) < 0)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
162 return -1;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
163 /* Empirically, the block counts on most SVR3 and SVR3-derived
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
164 systems seem to always be in terms of 512-byte blocks,
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
165 no matter what value f_bsize has. */
339
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
166 # if _AIX
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
167 # define CONVERT_BLOCKS(b) adjust_blocks ((b), fsd.f_bsize, 512)
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
168 # else
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
169 # define CONVERT_BLOCKS(b) (b)
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
170 # ifndef _SEQUENT_ /* _SEQUENT_ is DYNIX/ptx. */
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
171 # ifndef DOLPHIN /* DOLPHIN 3.8.alfa/7.18 has f_bavail */
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
172 # define f_bavail f_bfree
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
173 # endif
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
174 # endif
Jim Meyering <jim@meyering.net>
parents: 338
diff changeset
175 # endif
85
2a3d53e55301 merge with 3.5.5
Jim Meyering <jim@meyering.net>
parents: 76
diff changeset
176 #endif
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
177
325
Jim Meyering <jim@meyering.net>
parents: 323
diff changeset
178 #ifdef STAT_STATVFS /* SVR4. */
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
179 struct statvfs fsd;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
180
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
181 if (statvfs (path, &fsd) < 0)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
182 return -1;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
183 /* f_frsize isn't guaranteed to be supported. */
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
184 #define CONVERT_BLOCKS(b) \
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
185 adjust_blocks ((b), fsd.f_frsize ? fsd.f_frsize : fsd.f_bsize, 512)
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
186 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
187
323
Jim Meyering <jim@meyering.net>
parents: 316
diff changeset
188 #if !defined(STAT_STATFS2_FS_DATA) && !defined(STAT_READ_FILSYS) /* !Ultrix && !SVR2. */
197
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
189 fsp->fsu_blocks = CONVERT_BLOCKS (fsd.f_blocks);
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
190 fsp->fsu_bfree = CONVERT_BLOCKS (fsd.f_bfree);
6658e575c60c (adjust_blocks): Code it as a function again.
Jim Meyering <jim@meyering.net>
parents: 196
diff changeset
191 fsp->fsu_bavail = CONVERT_BLOCKS (fsd.f_bavail);
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
192 fsp->fsu_files = fsd.f_files;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
193 fsp->fsu_ffree = fsd.f_ffree;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
194 #endif
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
195
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
196 return 0;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
197 }
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
198
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
199 #if defined(_AIX) && defined(_I386)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
200 /* AIX PS/2 does not supply statfs. */
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
201
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
202 int
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
203 statfs (path, fsb)
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
204 char *path;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
205 struct statfs *fsb;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
206 {
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
207 struct stat stats;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
208 struct dustat fsd;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
209
426
defe7888e2f3 (statfs): Use stat, not safe_stat.
Jim Meyering <jim@meyering.net>
parents: 385
diff changeset
210 if (stat (path, &stats))
5
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
211 return -1;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
212 if (dustat (stats.st_dev, 0, &fsd, sizeof (fsd)))
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
213 return -1;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
214 fsb->f_type = 0;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
215 fsb->f_bsize = fsd.du_bsize;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
216 fsb->f_blocks = fsd.du_fsize - fsd.du_isize;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
217 fsb->f_bfree = fsd.du_tfree;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
218 fsb->f_bavail = fsd.du_tfree;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
219 fsb->f_files = (fsd.du_isize - 2) * fsd.du_inopb;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
220 fsb->f_ffree = fsd.du_tinode;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
221 fsb->f_fsid.val[0] = fsd.du_site;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
222 fsb->f_fsid.val[1] = fsd.du_pckno;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
223 return 0;
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
224 }
41c9d08b09d7 Initial revision
Jim Meyering <jim@meyering.net>
parents:
diff changeset
225 #endif /* _AIX && _I386 */