diff options
author | avatar <avatar@FreeBSD.org> | 2011-06-13 05:22:07 +0000 |
---|---|---|
committer | avatar <avatar@FreeBSD.org> | 2011-06-13 05:22:07 +0000 |
commit | 9618d7033ccc310c2871e38dfa865bc614e0f0f7 (patch) | |
tree | 73378a0c59f739c2d1560f8588d18f653f791b7f /usr.bin/find | |
parent | 1fb84703f742c6bcb40286059b667c4f2942ed64 (diff) | |
download | FreeBSD-src-9618d7033ccc310c2871e38dfa865bc614e0f0f7.zip FreeBSD-src-9618d7033ccc310c2871e38dfa865bc614e0f0f7.tar.gz |
Using statfs.f_fstypename rather than statfs.f_type whilst performing fstype
comparsion as nullfs will copy f_type from underlayer FS.
PR: bin/156258
Submitted by: Marcin Wisnicki <mwisnicki+freebsd@gmail.com>
MFC after: 1 month
Diffstat (limited to 'usr.bin/find')
-rw-r--r-- | usr.bin/find/function.c | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/usr.bin/find/function.c b/usr.bin/find/function.c index 26c022c..eabb054 100644 --- a/usr.bin/find/function.c +++ b/usr.bin/find/function.c @@ -846,7 +846,8 @@ f_fstype(PLAN *plan, FTSENT *entry) static dev_t curdev; /* need a guaranteed illegal dev value */ static int first = 1; struct statfs sb; - static int val_type, val_flags; + static int val_flags; + static char fstype[sizeof(sb.f_fstypename)]; char *p, save[2] = {0,0}; if ((plan->flags & F_MTMASK) == F_MTUNKNOWN) @@ -888,13 +889,13 @@ f_fstype(PLAN *plan, FTSENT *entry) * always copy both of them. */ val_flags = sb.f_flags; - val_type = sb.f_type; + strlcpy(fstype, sb.f_fstypename, sizeof(fstype)); } switch (plan->flags & F_MTMASK) { case F_MTFLAG: return val_flags & plan->mt_data; case F_MTTYPE: - return val_type == plan->mt_data; + return (strncmp(fstype, plan->c_data, sizeof(fstype)) == 0); default: abort(); } @@ -905,22 +906,11 @@ c_fstype(OPTION *option, char ***argvp) { char *fsname; PLAN *new; - struct xvfsconf vfc; fsname = nextarg(option, argvp); ftsoptions &= ~FTS_NOSTAT; new = palloc(option); - - /* - * Check first for a filesystem name. - */ - if (getvfsbyname(fsname, &vfc) == 0) { - new->flags |= F_MTTYPE; - new->mt_data = vfc.vfc_typenum; - return new; - } - switch (*fsname) { case 'l': if (!strcmp(fsname, "local")) { @@ -938,12 +928,8 @@ c_fstype(OPTION *option, char ***argvp) break; } - /* - * We need to make filesystem checks for filesystems - * that exists but aren't in the kernel work. - */ - fprintf(stderr, "Warning: Unknown filesystem type %s\n", fsname); - new->flags |= F_MTUNKNOWN; + new->flags |= F_MTTYPE; + new->c_data = fsname; return new; } |