View | Details | Raw Unified | Return to bug 260921
Collapse All | Expand All

(-)b/bin/df/df.c (-17 / +16 lines)
Lines 88-94 static void prthuman(const struct statfs *, int64_t); Link Here
88
static void	  prthumanval(const char *, int64_t);
88
static void	  prthumanval(const char *, int64_t);
89
static intmax_t	  fsbtoblk(int64_t, uint64_t, u_long);
89
static intmax_t	  fsbtoblk(int64_t, uint64_t, u_long);
90
static void	  prtstat(struct statfs *, struct maxwidths *);
90
static void	  prtstat(struct statfs *, struct maxwidths *);
91
static size_t	  regetmntinfo(struct statfs **, long, const char **);
91
static size_t	  regetmntinfo(struct statfs **, long, const char **, const char **);
92
static void	  update_maxwidths(struct maxwidths *, const struct statfs *);
92
static void	  update_maxwidths(struct maxwidths *, const struct statfs *);
93
static void	  usage(void);
93
static void	  usage(void);
94
94
Lines 115-121 main(int argc, char *argv[]) Link Here
115
	struct maxwidths maxwidths;
115
	struct maxwidths maxwidths;
116
	struct statfs *mntbuf;
116
	struct statfs *mntbuf;
117
	char *mntpt;
117
	char *mntpt;
118
	const char **vfslist;
118
	const char **vfslist_l, **vfslist_t;
119
	int i, mntsize;
119
	int i, mntsize;
120
	int ch, rv;
120
	int ch, rv;
121
121
Lines 124-130 main(int argc, char *argv[]) Link Here
124
	memset(&totalbuf, 0, sizeof(totalbuf));
124
	memset(&totalbuf, 0, sizeof(totalbuf));
125
	totalbuf.f_bsize = DEV_BSIZE;
125
	totalbuf.f_bsize = DEV_BSIZE;
126
	strlcpy(totalbuf.f_mntfromname, "total", MNAMELEN);
126
	strlcpy(totalbuf.f_mntfromname, "total", MNAMELEN);
127
	vfslist = NULL;
127
	vfslist_l = NULL;
128
	vfslist_t = NULL;
128
129
129
	argc = xo_parse_args(argc, argv);
130
	argc = xo_parse_args(argc, argv);
130
	if (argc < 0)
131
	if (argc < 0)
Lines 175-183 main(int argc, char *argv[]) Link Here
175
			/* Ignore duplicate -l */
176
			/* Ignore duplicate -l */
176
			if (lflag)
177
			if (lflag)
177
				break;
178
				break;
178
			if (vfslist != NULL)
179
			vfslist_l = makevfslist(makenetvfslist());
179
				xo_errx(1, "-l and -t are mutually exclusive.");
180
			vfslist = makevfslist(makenetvfslist());
181
			lflag = 1;
180
			lflag = 1;
182
			break;
181
			break;
183
		case 'm':
182
		case 'm':
Lines 188-198 main(int argc, char *argv[]) Link Here
188
			nflag = 1;
187
			nflag = 1;
189
			break;
188
			break;
190
		case 't':
189
		case 't':
191
			if (lflag)
190
			vfslist_t = makevfslist(optarg);
192
				xo_errx(1, "-l and -t are mutually exclusive.");
193
			if (vfslist != NULL)
194
				xo_errx(1, "only one -t option may be specified");
195
			vfslist = makevfslist(optarg);
196
			break;
191
			break;
197
		case 'T':
192
		case 'T':
198
			Tflag = 1;
193
			Tflag = 1;
Lines 211-217 main(int argc, char *argv[]) Link Here
211
	if (!*argv) {
206
	if (!*argv) {
212
		/* everything (modulo -t) */
207
		/* everything (modulo -t) */
213
		mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
208
		mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
214
		mntsize = regetmntinfo(&mntbuf, mntsize, vfslist);
209
		mntsize = regetmntinfo(&mntbuf, mntsize, vfslist_l, vfslist_t);
215
	} else {
210
	} else {
216
		/* just the filesystems specified on the command line */
211
		/* just the filesystems specified on the command line */
217
		mntbuf = malloc(argc * sizeof(*mntbuf));
212
		mntbuf = malloc(argc * sizeof(*mntbuf));
Lines 259-265 main(int argc, char *argv[]) Link Here
259
		 * list a mount point that does not match the other args
254
		 * list a mount point that does not match the other args
260
		 * we've been given (-l, -t, etc.).
255
		 * we've been given (-l, -t, etc.).
261
		 */
256
		 */
262
		if (checkvfsname(statfsbuf.f_fstypename, vfslist)) {
257
		if (checkvfsname(statfsbuf.f_fstypename, vfslist_l) ||
258
		    checkvfsname(statfsbuf.f_fstypename, vfslist_t)) {
263
			rv = 1;
259
			rv = 1;
264
			continue;
260
			continue;
265
		}
261
		}
Lines 309-329 getmntpt(const char *name) Link Here
309
305
310
/*
306
/*
311
 * Make a pass over the file system info in ``mntbuf'' filtering out
307
 * Make a pass over the file system info in ``mntbuf'' filtering out
312
 * file system types not in vfslist and possibly re-stating to get
308
 * file system types not in vfslist_{l,t} and possibly re-stating to get
313
 * current (not cached) info.  Returns the new count of valid statfs bufs.
309
 * current (not cached) info.  Returns the new count of valid statfs bufs.
314
 */
310
 */
315
static size_t
311
static size_t
316
regetmntinfo(struct statfs **mntbufp, long mntsize, const char **vfslist)
312
regetmntinfo(struct statfs **mntbufp, long mntsize, const char **vfslist_l,
313
    const char **vfslist_t)
317
{
314
{
318
	int error, i, j;
315
	int error, i, j;
319
	struct statfs *mntbuf;
316
	struct statfs *mntbuf;
320
317
321
	if (vfslist == NULL)
318
	if (vfslist_l == NULL && vfslist_t == NULL)
322
		return (nflag ? mntsize : getmntinfo(mntbufp, MNT_WAIT));
319
		return (nflag ? mntsize : getmntinfo(mntbufp, MNT_WAIT));
323
320
324
	mntbuf = *mntbufp;
321
	mntbuf = *mntbufp;
325
	for (j = 0, i = 0; i < mntsize; i++) {
322
	for (j = 0, i = 0; i < mntsize; i++) {
326
		if (checkvfsname(mntbuf[i].f_fstypename, vfslist))
323
		if (vfslist_l && checkvfsname(mntbuf[i].f_fstypename, vfslist_l))
324
			continue;
325
		if (vfslist_t && checkvfsname(mntbuf[i].f_fstypename, vfslist_t))
327
			continue;
326
			continue;
328
		/*
327
		/*
329
		 * XXX statfs(2) can fail for various reasons. It may be
328
		 * XXX statfs(2) can fail for various reasons. It may be

Return to bug 260921