magrep: add -l flag

Closes: #121 [via git-merge-pr]
pull/124/head
Duncaen 6 years ago committed by Leah Neukirchen
parent 817a111909
commit 98918783aa

@ -15,6 +15,7 @@ static int aflag;
static int cflag; static int cflag;
static int dflag; static int dflag;
static int iflag; static int iflag;
static int lflag;
static int oflag; static int oflag;
static int pflag; static int pflag;
static int qflag; static int qflag;
@ -29,7 +30,7 @@ static char *curfile;
int int
match(char *file, char *hdr, char *s) match(char *file, char *hdr, char *s)
{ {
if (oflag && !cflag && !qflag && !vflag) { if (oflag && !cflag && !qflag && !vflag && !lflag) {
regmatch_t pmatch; regmatch_t pmatch;
int len, matched; int len, matched;
matched = 0; matched = 0;
@ -118,22 +119,23 @@ match_body(char *file)
blaze822_walk_mime(msg, 0, match_part); blaze822_walk_mime(msg, 0, match_part);
} }
void int
match_value(char *file, char *h, char *v) match_value(char *file, char *h, char *v)
{ {
if (dflag) { if (dflag) {
char d[4096]; char d[4096];
blaze822_decode_rfc2047(d, v, sizeof d, "UTF-8"); blaze822_decode_rfc2047(d, v, sizeof d, "UTF-8");
match(file, h, d); return match(file, h, d);
} else if (aflag) { } else if (aflag) {
char *disp, *addr; char *disp, *addr;
while ((v = blaze822_addr(v, &disp, &addr))) { while ((v = blaze822_addr(v, &disp, &addr))) {
if (addr && match(file, h, addr)) if (addr && match(file, h, addr))
break; return 1;
} }
} else { } else {
match(file, h, v); return match(file, h, v);
} }
return 0;
} }
void void
@ -163,14 +165,15 @@ magrep(char *file)
char *v = strchr(hdr, ':'); char *v = strchr(hdr, ':');
if (v) { if (v) {
*v = 0; *v = 0;
match_value(file, hdr, v + 1 + (v[1] == ' ')); if (match_value(file, hdr, v + 1 + (v[1] == ' ')) && lflag)
break;
*v = ':'; *v = ':';
} }
} }
} else { } else {
char *v = blaze822_chdr(msg, header); char *v = blaze822_chdr(msg, header);
if (v) if (v)
match_value(file, header, v); (void)match_value(file, header, v);
} }
blaze822_free(msg); blaze822_free(msg);
@ -180,12 +183,13 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
int c; int c;
while ((c = getopt(argc, argv, "acdim:opqv")) != -1) while ((c = getopt(argc, argv, "acdilm:opqv")) != -1)
switch (c) { switch (c) {
case 'a': aflag = 1; break; case 'a': aflag = 1; break;
case 'c': cflag = 1; break; case 'c': cflag = 1; break;
case 'd': dflag = 1; break; case 'd': dflag = 1; break;
case 'i': iflag = REG_ICASE; break; case 'i': iflag = REG_ICASE; break;
case 'l': lflag = 1; break;
case 'm': mflag = atol(optarg); break; case 'm': mflag = atol(optarg); break;
case 'o': oflag = 1; break; case 'o': oflag = 1; break;
case 'p': pflag = 1; break; case 'p': pflag = 1; break;
@ -194,7 +198,7 @@ main(int argc, char *argv[])
default: default:
usage: usage:
fprintf(stderr, fprintf(stderr,
"Usage: magrep [-c|-o|-p|-q|-m max] [-v] [-i] [-a|-d] header:regex [msgs...]\n"); "Usage: magrep [-c|-o|-p|-q|-m max] [-v] [-i] [-l] [-a|-d] header:regex [msgs...]\n");
exit(2); exit(2);
} }

@ -1,4 +1,4 @@
.Dd February 15, 2017 .Dd July 7, 2018
.Dt MAGREP 1 .Dt MAGREP 1
.Os .Os
.Sh NAME .Sh NAME
@ -9,6 +9,7 @@
.Op Fl c | Fl q | Fl m Ar max .Op Fl c | Fl q | Fl m Ar max
.Op Fl v .Op Fl v
.Op Fl i .Op Fl i
.Op Fl l
.Op Fl a | Fl d .Op Fl a | Fl d
.Ar header Ns Cm \&: Ns Ar regex .Ar header Ns Cm \&: Ns Ar regex
.Op Ar msgs\ ... .Op Ar msgs\ ...
@ -78,6 +79,8 @@ according to RFC 2047 prior to searching.
Match Match
.Ar regex .Ar regex
case insensitively. case insensitively.
.It Fl l
Only search a message until a match has been found.
.It Fl m Ar max .It Fl m Ar max
Do not show more than Do not show more than
.Ar max .Ar max

Loading…
Cancel
Save