diff options
author | Kyle Evans <kevans@FreeBSD.org> | 2018-06-07 18:27:58 +0000 |
---|---|---|
committer | Kyle Evans <kevans@FreeBSD.org> | 2018-06-07 18:27:58 +0000 |
commit | cbfff13fa24bc0469f443cf0b8efd1c25a9d703a (patch) | |
tree | 5c1ff3c17d8f74d6b32b7aa827dc3c09568a04ea /usr.bin/grep | |
parent | 470f228f628faaa5be2b163fb30f44325e835d7a (diff) | |
download | src-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.c | 10 | ||||
-rw-r--r-- | usr.bin/grep/grep.h | 4 | ||||
-rw-r--r-- | usr.bin/grep/util.c | 35 |
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 |