X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/d6b2ae5fa68b9a82ffc006c233aef64c5cdb3bd2..5ed8cd671b27e1388c0c7e881805775a8e5b353a:/uip/picksbr.c diff --git a/uip/picksbr.c b/uip/picksbr.c index 3c2107c2..ca330b96 100644 --- a/uip/picksbr.c +++ b/uip/picksbr.c @@ -1,6 +1,4 @@ - -/* - * picksbr.c -- routines to help pick along... +/* picksbr.c -- routines to help pick along... * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -64,7 +62,7 @@ DEFINE_SWITCH_ARRAY(PARSE, parswit); #define STAR 01 -#define LBSIZE 1024 +#define LBSIZE NMH_BUFSIZ #define ESIZE 1024 @@ -115,7 +113,7 @@ static unsigned char cc[] = { #define nxtarg() (*argp ? *argp++ : NULL) #define prvarg() argp-- -#define padvise if (!talked++) advise +#define pinform if (!talked++) inform struct nexus { int (*n_action)(); @@ -182,13 +180,19 @@ static struct nexus *parse(void); static struct nexus *nexp1(void); static struct nexus *nexp2(void); static struct nexus *nexp3(void); -static struct nexus *newnexus(int (*)()); +static struct nexus *newnexus(int (*)(struct nexus *n, + FILE *fp, int msgnum, long start, long stop)); -static int ORaction(); -static int ANDaction(); -static int NOTaction(); -static int GREPaction(); -static int TWSaction(); +static int ORaction(struct nexus *n, FILE *fp, int msgnum, + long start, long stop); +static int ANDaction(struct nexus *n, FILE *fp, int msgnum, + long start, long stop); +static int NOTaction(struct nexus *n, FILE *fp, int msgnum, + long start, long stop); +static int GREPaction(struct nexus *n, FILE *fp, int msgnum, + long start, long stop); +static int TWSaction(struct nexus *n, FILE *fp, int msgnum, + long start, long stop); int @@ -200,10 +204,10 @@ pcompile (char **vec, char *date) talked = 0; if ((head = parse ()) == NULL) - return (talked ? 0 : 1); + return !talked; if (*argp) { - padvise (NULL, "%s unexpected", *argp); + inform("%s unexpected", *argp); return 0; } @@ -214,14 +218,14 @@ pcompile (char **vec, char *date) static struct nexus * parse (void) { - register char *cp; - register struct nexus *n, *o; + char *cp; + struct nexus *n, *o; if ((n = nexp1 ()) == NULL || (cp = nxtarg ()) == NULL) return n; if (*cp != '-') { - padvise (NULL, "%s unexpected", cp); + pinform("%s unexpected", cp); return NULL; } @@ -242,7 +246,7 @@ parse (void) o->n_L_child = n; if ((o->n_R_child = parse ())) return o; - padvise (NULL, "missing disjunctive"); + pinform("missing disjunctive"); free (o); return NULL; @@ -256,14 +260,14 @@ header: ; static struct nexus * nexp1 (void) { - register char *cp; - register struct nexus *n, *o; + char *cp; + struct nexus *n, *o; if ((n = nexp2 ()) == NULL || (cp = nxtarg ()) == NULL) return n; if (*cp != '-') { - padvise (NULL, "%s unexpected", cp); + pinform("%s unexpected", cp); free (n); return NULL; } @@ -287,7 +291,7 @@ nexp1 (void) o->n_L_child = n; if ((o->n_R_child = nexp1 ())) return o; - padvise (NULL, "missing conjunctive"); + pinform("missing conjunctive"); free (o); return NULL; @@ -302,8 +306,8 @@ header: ; static struct nexus * nexp2 (void) { - register char *cp; - register struct nexus *n; + char *cp; + struct nexus *n; if ((cp = nxtarg ()) == NULL) return NULL; @@ -329,7 +333,7 @@ nexp2 (void) n = newnexus (NOTaction); if ((n->n_L_child = nexp3 ())) return n; - padvise (NULL, "missing negation"); + pinform("missing negation"); free (n); return NULL; @@ -344,15 +348,15 @@ static struct nexus * nexp3 (void) { int i; - register char *cp, *dp; + char *cp, *dp; char buffer[BUFSIZ], temp[64]; - register struct nexus *n; + struct nexus *n; if ((cp = nxtarg ()) == NULL) return NULL; if (*cp != '-') { - padvise (NULL, "%s unexpected", cp); + pinform("%s unexpected", cp); return NULL; } @@ -372,16 +376,16 @@ nexp3 (void) case PRLBR: if ((n = parse ()) == NULL) { - padvise (NULL, "missing group"); + pinform("missing group"); return NULL; } if ((cp = nxtarg ()) == NULL) { - padvise (NULL, "missing -rbrace"); + pinform("missing -rbrace"); return NULL; } if (*cp++ == '-' && smatch (cp, parswit) == PRRBR) return n; - padvise (NULL, "%s unexpected", --cp); + pinform("%s unexpected", --cp); return NULL; default: @@ -398,7 +402,7 @@ nexp3 (void) dp = *brkstring (temp, " ", NULL); header: ; if (!(cp = nxtarg ())) {/* allow -xyz arguments */ - padvise (NULL, "missing argument to %s", argp[-2]); + pinform("missing argument to %s", argp[-2]); return NULL; } n = newnexus (GREPaction); @@ -411,27 +415,27 @@ nexp3 (void) n = newnexus (GREPaction); n->n_header = 0; if (!(cp = nxtarg ())) {/* allow -xyz arguments */ - padvise (NULL, "missing argument to %s", argp[-2]); + pinform("missing argument to %s", argp[-2]); free (n); return NULL; } dp = cp; pattern: ; if (!gcompile (n, dp)) { - padvise (NULL, "pattern error in %s %s", argp[-2], cp); + pinform("pattern error in %s %s", argp[-2], cp); free (n); return NULL; } - n->n_patbuf = getcpy (dp); + n->n_patbuf = mh_xstrdup(dp); return n; case PROTHR: - padvise (NULL, "internal error!"); + pinform("internal error!"); return NULL; case PRDATF: if (!(datesw = nxtarg ()) || *datesw == '-') { - padvise (NULL, "missing argument to %s", argp[-2]); + pinform("missing argument to %s", argp[-2]); return NULL; } return nexp3 (); @@ -439,13 +443,13 @@ nexp3 (void) case PRAFTR: case PRBEFR: if (!(cp = nxtarg ())) {/* allow -xyz arguments */ - padvise (NULL, "missing argument to %s", argp[-2]); + pinform("missing argument to %s", argp[-2]); return NULL; } n = newnexus (TWSaction); n->n_datef = datesw; if (!tcompile (cp, &n->n_tws, n->n_after = i == PRAFTR)) { - padvise (NULL, "unable to parse %s %s", argp[-2], cp); + pinform("unable to parse %s %s", argp[-2], cp); free (n); return NULL; } @@ -455,27 +459,17 @@ nexp3 (void) static struct nexus * -newnexus (int (*action)()) +newnexus(int (*action)(struct nexus *n, FILE *fp, int msgnum, + long start, long stop)) { - register struct nexus *p; - - if ((p = (struct nexus *) mh_xcalloc ((size_t) 1, sizeof *p)) == NULL) - adios (NULL, "unable to allocate component storage"); + struct nexus *p; + NEW0(p); p->n_action = action; return p; } -#define args(a) a, fp, msgnum, start, stop -#define params args (n) -#define plist \ - register struct nexus *n; \ - register FILE *fp; \ - int msgnum; \ - long start, \ - stop; - int pmatches (FILE *fp, int msgnum, long start, long stop, int debug) { @@ -485,14 +479,14 @@ pmatches (FILE *fp, int msgnum, long start, long stop, int debug) if (!talked++ && debug) PRaction (head, 0); - return (*head->n_action) (args (head)); + return (*head->n_action)(head, fp, msgnum, start, stop); } static void PRaction (struct nexus *n, int level) { - register int i; + int i; for (i = 0; i < level; i++) fprintf (stderr, "| "); @@ -531,39 +525,36 @@ PRaction (struct nexus *n, int level) static int -ORaction (params) -plist +ORaction(struct nexus *n, FILE *fp, int msgnum, long start, long stop) { - if ((*n->n_L_child->n_action) (args (n->n_L_child))) + if ((*n->n_L_child->n_action)(n->n_L_child, fp, msgnum, start, stop)) return 1; - return (*n->n_R_child->n_action) (args (n->n_R_child)); + return (*n->n_R_child->n_action)(n->n_R_child, fp, msgnum, start, stop); } static int -ANDaction (params) -plist +ANDaction(struct nexus *n, FILE *fp, int msgnum, long start, long stop) { - if (!(*n->n_L_child->n_action) (args (n->n_L_child))) + if (!(*n->n_L_child->n_action)(n->n_L_child, fp, msgnum, start, stop)) return 0; - return (*n->n_R_child->n_action) (args (n->n_R_child)); + return (*n->n_R_child->n_action)(n->n_R_child, fp, msgnum, start, stop); } static int -NOTaction (params) -plist +NOTaction(struct nexus *n, FILE *fp, int msgnum, long start, long stop) { - return (!(*n->n_L_child->n_action) (args (n->n_L_child))); + return (!(*n->n_L_child->n_action)(n->n_L_child, fp, msgnum, start, stop)); } static int gcompile (struct nexus *n, char *astr) { - register int c; + int c; int cclcnt; - register unsigned char *ep, *dp, *sp, *lastep = 0; + unsigned char *ep, *dp, *sp, *lastep = 0; dp = (ep = (unsigned char *) n->n_expbuf) + sizeof n->n_expbuf; sp = (unsigned char *) astr; @@ -635,6 +626,7 @@ gcompile (struct nexus *n, char *astr) case '\\': if ((c = *sp++) == '\0') goto cerror; + /* FALLTHRU */ defchar: default: *ep++ = CCHR; @@ -648,12 +640,11 @@ cerror: ; static int -GREPaction (params) -plist +GREPaction(struct nexus *n, FILE *fp, int msgnum, long start, long stop) { int c, body, lf; long pos = start; - register char *p1, *p2, *ebp, *cbp; + char *p1, *p2, *ebp, *cbp; char ibuf[BUFSIZ]; NMH_UNUSED (msgnum); @@ -684,21 +675,18 @@ plist --p2; break; } - else - lf = 0; + lf = 0; } if (c == '\n') { if (body) break; - else { - if (lf) { - body++; - break; - } - lf++; - /* Unfold by skipping the newline. */ - c = 0; - } + if (lf) { + body++; + break; + } + lf++; + /* Unfold by skipping the newline. */ + c = 0; } if (c && p1 < &linebuf[LBSIZE - 1]) *p1++ = c; @@ -743,7 +731,7 @@ plist static int advance (char *alp, char *aep) { - register unsigned char *lp, *ep, *curlp; + unsigned char *lp, *ep, *curlp; lp = (unsigned char *)alp; ep = (unsigned char *)aep; @@ -811,7 +799,7 @@ advance (char *alp, char *aep) return 0; default: - admonish (NULL, "advance() botch -- you lose big"); + inform("advance() botch -- you lose big, continuing..."); return 0; } } @@ -820,8 +808,8 @@ advance (char *alp, char *aep) static int cclass (unsigned char *aset, int ac, int af) { - register unsigned int n; - register unsigned char c, *set; + unsigned int n; + unsigned char c, *set; set = aset; if ((c = ac) == 0) @@ -839,12 +827,12 @@ cclass (unsigned char *aset, int ac, int af) static int tcompile (char *ap, struct tws *tb, int isafter) { - register struct tws *tw; + struct tws *tw; if ((tw = tws_parse (ap, isafter)) == NULL) return 0; - twscopy (tb, tw); + *tb = *tw; return 1; } @@ -853,7 +841,7 @@ static struct tws * tws_parse (char *ap, int isafter) { char buffer[BUFSIZ]; - register struct tws *tw, *ts; + struct tws *tw, *ts; if ((tw = tws_special (ap)) != NULL) { tw->tw_sec = tw->tw_min = isafter ? 59 : 0; @@ -895,7 +883,7 @@ tws_special (char *ap) { int i; time_t clock; - register struct tws *tw; + struct tws *tw; time (&clock); if (!strcasecmp (ap, "today")) @@ -918,11 +906,12 @@ tws_special (char *ap) if ((i -= tw->tw_wday) > 0) i -= 7; } - else + else { if (*ap != '-') return NULL; - else /* -ddd days ago */ - i = atoi (ap); /* we should error check this */ + /* -ddd days ago */ + i = atoi (ap); /* we should error check this */ + } clock += (long) ((60 * 60 * 24) * i); return dlocaltime (&clock); @@ -930,13 +919,12 @@ tws_special (char *ap) static int -TWSaction (params) -plist +TWSaction(struct nexus *n, FILE *fp, int msgnum, long start, long stop) { int state; - register char *bp; - char buf[BUFSIZ], name[NAMESZ]; - register struct tws *tw; + char *bp; + char buf[NMH_BUFSIZ], name[NAMESZ]; + struct tws *tw; m_getfld_state_t gstate = 0; NMH_UNUSED (stop); @@ -946,9 +934,8 @@ plist switch (state = m_getfld (&gstate, name, buf, &bufsz, fp)) { case FLD: case FLDPLUS: - if (bp != NULL) - free (bp), bp = NULL; - bp = add (buf, NULL); + mh_xfree(bp); + bp = mh_xstrdup(buf); while (state == FLDPLUS) { bufsz = sizeof buf; state = m_getfld (&gstate, name, buf, &bufsz, fp); @@ -963,9 +950,8 @@ plist case LENERR: case FMTERR: if (state == LENERR || state == FMTERR) - advise (NULL, "format error in message %d", msgnum); - if (bp != NULL) - free (bp); + inform("format error in message %d", msgnum); + mh_xfree(bp); return 0; default: @@ -976,13 +962,12 @@ plist m_getfld_state_destroy (&gstate); if ((tw = dparsetime (bp)) == NULL) - advise (NULL, "unable to parse %s field in message %d, matching...", + inform("unable to parse %s field in message %d, matching...", n->n_datef, msgnum), state = 1; else state = n->n_after ? (twsort (tw, &n->n_tws) > 0) : (twsort (tw, &n->n_tws) < 0); - if (bp != NULL) - free (bp); + mh_xfree(bp); return state; }