Author: avatar
Date: Mon Jun 13 05:22:07 2011
New Revision: 223035
URL: http://svn.freebsd.org/changeset/base/223035

Log:
  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+free...@gmail.com>
  MFC after:    1 month

Modified:
  head/usr.bin/find/function.c

Modified: head/usr.bin/find/function.c
==============================================================================
--- head/usr.bin/find/function.c        Mon Jun 13 04:55:29 2011        
(r223034)
+++ head/usr.bin/find/function.c        Mon Jun 13 05:22:07 2011        
(r223035)
@@ -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;
 }
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to