Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Jul 2011 03:30:42 +0000 (UTC)
From:      Tai-hwa Liang <avatar@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r224208 - stable/7/usr.bin/find
Message-ID:  <201107190330.p6J3UgQp051439@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avatar
Date: Tue Jul 19 03:30:42 2011
New Revision: 224208
URL: http://svn.freebsd.org/changeset/base/224208

Log:
  MFC r223035: 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>

Modified:
  stable/7/usr.bin/find/function.c
Directory Properties:
  stable/7/usr.bin/find/   (props changed)

Modified: stable/7/usr.bin/find/function.c
==============================================================================
--- stable/7/usr.bin/find/function.c	Tue Jul 19 00:37:24 2011	(r224207)
+++ stable/7/usr.bin/find/function.c	Tue Jul 19 03:30:42 2011	(r224208)
@@ -841,7 +841,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)
@@ -883,13 +884,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();
 	}
@@ -900,22 +901,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")) {
@@ -933,12 +923,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;
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201107190330.p6J3UgQp051439>