summaryrefslogtreecommitdiff
path: root/usr.bin/grep
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2018-06-07 18:27:58 +0000
committerKyle Evans <kevans@FreeBSD.org>2018-06-07 18:27:58 +0000
commitcbfff13fa24bc0469f443cf0b8efd1c25a9d703a (patch)
tree5c1ff3c17d8f74d6b32b7aa827dc3c09568a04ea /usr.bin/grep
parent470f228f628faaa5be2b163fb30f44325e835d7a (diff)
downloadsrc-test-cbfff13fa24bc0469f443cf0b8efd1c25a9d703a.tar.gz
src-test-cbfff13fa24bc0469f443cf0b8efd1c25a9d703a.zip
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'.
Notes
Notes: svn path=/head/; revision=334806
Diffstat (limited to 'usr.bin/grep')
-rw-r--r--usr.bin/grep/grep.c10
-rw-r--r--usr.bin/grep/grep.h4
-rw-r--r--usr.bin/grep/util.c35
3 files changed, 26 insertions, 23 deletions
diff --git a/usr.bin/grep/grep.c b/usr.bin/grep/grep.c
index e891ccc7592a4..542ee5f0e7dee 100644
--- a/usr.bin/grep/grep.c
+++ b/usr.bin/grep/grep.c
@@ -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));
}
diff --git a/usr.bin/grep/grep.h b/usr.bin/grep/grep.h
index fde711820985f..b2c16e8767d7a 100644
--- a/usr.bin/grep/grep.h
+++ b/usr.bin/grep/grep.h
@@ -125,8 +125,8 @@ extern char re_error[RE_ERROR_BUF + 1]; /* Seems big enough */
/* 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);
diff --git a/usr.bin/grep/util.c b/usr.bin/grep/util.c
index b354a7836f85d..dfce2161bacf7 100644
--- a/usr.bin/grep/util.c
+++ b/usr.bin/grep/util.c
@@ -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, bool matched)
* 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