svn commit: r334806 - head/usr.bin/grep

Kyle Evans kevans at FreeBSD.org
Thu Jun 7 18:28:00 UTC 2018


Author: kevans
Date: Thu Jun  7 18:27:58 2018
New Revision: 334806
URL: https://svnweb.freebsd.org/changeset/base/334806

Log:
  bsdgrep(1): Do some less dirty things with return types
  
  Neither procfile nor grep_tree return anything meaningful to their callers.
  None of the callers actually care about how many lines were matched in all
  of the files they processed; it's all about "did anything match?"
  
  This is generally just a light refactoring to remind me of what actually
  matters as I'm rewriting these bits to care less about 'stuff'.

Modified:
  head/usr.bin/grep/grep.c
  head/usr.bin/grep/grep.h
  head/usr.bin/grep/util.c

Modified: head/usr.bin/grep/grep.c
==============================================================================
--- head/usr.bin/grep/grep.c	Thu Jun  7 18:24:25 2018	(r334805)
+++ head/usr.bin/grep/grep.c	Thu Jun  7 18:27:58 2018	(r334806)
@@ -339,6 +339,7 @@ main(int argc, char *argv[])
 	long long l;
 	unsigned int aargc, eargc, i;
 	int c, lastc, needpattern, newarg, prevoptind;
+	bool matched;
 
 	setlocale(LC_ALL, "");
 
@@ -725,15 +726,16 @@ main(int argc, char *argv[])
 		exit(!procfile("-"));
 
 	if (dirbehave == DIR_RECURSE)
-		c = grep_tree(aargv);
+		matched = grep_tree(aargv);
 	else
-		for (c = 0; aargc--; ++aargv) {
+		for (matched = false; aargc--; ++aargv) {
 			if ((finclude || fexclude) && !file_matching(*aargv))
 				continue;
-			c+= procfile(*aargv);
+			if (procfile(*aargv))
+				matched = true;
 		}
 
 	/* Find out the correct return value according to the
 	   results and the command line option. */
-	exit(c ? (file_err ? (qflag ? 0 : 2) : 0) : (file_err ? 2 : 1));
+	exit(matched ? (file_err ? (qflag ? 0 : 2) : 0) : (file_err ? 2 : 1));
 }

Modified: head/usr.bin/grep/grep.h
==============================================================================
--- head/usr.bin/grep/grep.h	Thu Jun  7 18:24:25 2018	(r334805)
+++ head/usr.bin/grep/grep.h	Thu Jun  7 18:27:58 2018	(r334806)
@@ -125,8 +125,8 @@ extern char	 re_error[RE_ERROR_BUF + 1];	/* Seems big 
 
 /* util.c */
 bool	 file_matching(const char *fname);
-int	 procfile(const char *fn);
-int	 grep_tree(char **argv);
+bool	 procfile(const char *fn);
+bool	 grep_tree(char **argv);
 void	*grep_malloc(size_t size);
 void	*grep_calloc(size_t nmemb, size_t size);
 void	*grep_realloc(void *ptr, size_t size);

Modified: head/usr.bin/grep/util.c
==============================================================================
--- head/usr.bin/grep/util.c	Thu Jun  7 18:24:25 2018	(r334805)
+++ head/usr.bin/grep/util.c	Thu Jun  7 18:27:58 2018	(r334806)
@@ -139,16 +139,17 @@ dir_matching(const char *dname)
  * Processes a directory when a recursive search is performed with
  * the -R option.  Each appropriate file is passed to procfile().
  */
-int
+bool
 grep_tree(char **argv)
 {
 	FTS *fts;
 	FTSENT *p;
 	int c, fts_flags;
-	bool ok;
+	bool matched, ok;
 	const char *wd[] = { ".", NULL };
 
 	c = fts_flags = 0;
+	matched = false;
 
 	switch(linkbehave) {
 	case LINK_EXPLICIT:
@@ -195,14 +196,14 @@ grep_tree(char **argv)
 			if (fexclude || finclude)
 				ok &= file_matching(p->fts_path);
 
-			if (ok)
-				c += procfile(p->fts_path);
+			if (ok && procfile(p->fts_path))
+				matched = true;
 			break;
 		}
 	}
 
 	fts_close(fts);
-	return (c);
+	return (matched);
 }
 
 static void
@@ -288,7 +289,7 @@ procmatches(struct mprintc *mc, struct parsec *pc, boo
  * Opens a file and processes it.  Each file is processed line-by-line
  * passing the lines to procline().
  */
-int
+bool
 procfile(const char *fn)
 {
 	struct parsec pc;
@@ -296,7 +297,7 @@ procfile(const char *fn)
 	struct file *f;
 	struct stat sb;
 	mode_t s;
-	int c, t;
+	int lines, t;
 
 	if (strcmp(fn, "-") == 0) {
 		fn = label != NULL ? label : errstr[1];
@@ -306,10 +307,10 @@ procfile(const char *fn)
 			/* Check if we need to process the file */
 			s = sb.st_mode & S_IFMT;
 			if (dirbehave == DIR_SKIP && s == S_IFDIR)
-				return (0);
+				return (false);
 			if (devbehave == DEV_SKIP && (s == S_IFIFO ||
 			    s == S_IFCHR || s == S_IFBLK || s == S_IFSOCK))
-				return (0);
+				return (false);
 		}
 		f = grep_open(fn);
 	}
@@ -317,7 +318,7 @@ procfile(const char *fn)
 		file_err = true;
 		if (!sflag)
 			warn("%s", fn);
-		return (0);
+		return (false);
 	}
 
 	pc.ln.file = grep_strdup(fn);
@@ -335,7 +336,7 @@ procfile(const char *fn)
 		mc.doctx = true;
 	mcount = mlimit;
 
-	for (c = 0;  c == 0 || !(lflag || qflag); ) {
+	for (lines = 0; lines == 0 || !(lflag || qflag); ) {
 		/*
 		 * XXX TODO: We need to revisit this in a chunking world. We're
 		 * not going to be doing per-line statistics because of the
@@ -365,7 +366,7 @@ procfile(const char *fn)
 		}
 
 		if ((t = procline(&pc)) == 0)
-			++c;
+			++lines;
 
 		/* Halt processing if we hit our match limit */
 		if (!procmatches(&mc, &pc, t == 0))
@@ -378,19 +379,19 @@ procfile(const char *fn)
 	if (cflag) {
 		if (!hflag)
 			printf("%s:", pc.ln.file);
-		printf("%u\n", c);
+		printf("%u\n", lines);
 	}
-	if (lflag && !qflag && c != 0)
+	if (lflag && !qflag && lines != 0)
 		printf("%s%c", fn, nullflag ? 0 : '\n');
-	if (Lflag && !qflag && c == 0)
+	if (Lflag && !qflag && lines == 0)
 		printf("%s%c", fn, nullflag ? 0 : '\n');
-	if (c && !cflag && !lflag && !Lflag &&
+	if (lines != 0 && !cflag && !lflag && !Lflag &&
 	    binbehave == BINFILE_BIN && f->binary && !qflag)
 		printf(errstr[7], fn);
 
 	free(pc.ln.file);
 	free(f);
-	return (c);
+	return (lines != 0);
 }
 
 #ifdef WITH_INTERNAL_NOSPEC


More information about the svn-src-all mailing list