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'.
This commit is contained in:
parent
470f228f62
commit
cbfff13fa2
@ -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));
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user