X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fpick.c;h=0465ef51490980b6cdfd7e0f1decfaaeec51441b;hp=a487adcfb9a511d377f87accd058f2ca4f80b989;hb=d4c34b4439a9dbd89664de460ed37ecddc260fb1;hpb=cf1205b5cbea2f0cd6ea710ec16c637df85b647c diff --git a/uip/pick.c b/uip/pick.c index a487adc..0465ef5 100644 --- a/uip/pick.c +++ b/uip/pick.c @@ -92,7 +92,7 @@ main(int argc, char **argv) char *seqs[NUMATTRS + 1], *vec[MAXARGS]; struct msgs_array msgs = { 0, 0, NULL }; struct msgs *mp; - register FILE *fp; + FILE *fp; if (atexit(putzero_done) != 0) { adios(EX_OSERR, NULL, "atexit failed"); @@ -274,7 +274,6 @@ main(int argc, char **argv) } else { /* if it doesn't match, then unselect it */ unset_selected(mp, msgnum); - mp->numsel--; } if (fp) fclose(fp); @@ -381,6 +380,7 @@ static struct swit parswit[] = { static char linebuf[LBSIZE + 1]; +static char decoded_linebuf[LBSIZE + 1]; /* the magic array for case-independence */ static char cc[] = { @@ -506,7 +506,7 @@ static int TWSaction(); static int pcompile(char **vec, char *date) { - register char *cp; + char *cp; if ((cp = getenv("MHPDEBUG")) && *cp) pdebug++; @@ -531,8 +531,8 @@ 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; @@ -572,8 +572,8 @@ 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; @@ -614,8 +614,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; @@ -655,9 +655,9 @@ 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; @@ -766,10 +766,9 @@ pattern: ; static struct nexus * newnexus(int (*action)()) { - register struct nexus *p; + struct nexus *p; - if ((p = (struct nexus *) calloc((size_t) 1, sizeof *p)) == NULL) - adios(EX_OSERR, NULL, "unable to allocate component storage"); + p = mh_xcalloc(1, sizeof *p); p->n_action = action; return p; @@ -779,8 +778,8 @@ newnexus(int (*action)()) #define args(a) a, fp, msgnum, start, stop #define params args(n) #define plist \ - register struct nexus *n; \ - register FILE *fp; \ + struct nexus *n; \ + FILE *fp; \ int msgnum; \ long start, \ stop; @@ -801,7 +800,7 @@ pmatches(FILE *fp, int msgnum, long start, long stop) static void PRaction(struct nexus *n, int level) { - register int i; + int i; for (i = 0; i < level; i++) fprintf(stderr, "| "); @@ -870,9 +869,9 @@ plist 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 = n->n_expbuf) + sizeof n->n_expbuf; sp = astr; @@ -962,7 +961,7 @@ plist { int c, body, lf; long pos = start; - register char *p1, *p2, *ebp, *cbp; + char *p1, *p2, *ebp, *cbp; char ibuf[BUFSIZ]; fseek(fp, start, SEEK_SET); @@ -1016,8 +1015,17 @@ plist p1 = linebuf; p2 = n->n_expbuf; + /* + ** Attempt to decode as a MIME header. If it's the + ** last header, body will be 1 and lf will be at least 1. + */ + if ((body == 0 || lf > 0) && decode_rfc2047(linebuf, + decoded_linebuf, sizeof decoded_linebuf)) { + p1 = decoded_linebuf; + } + if (n->n_circf) { - if (advance(p1, p2)) + if (advance(p1, p2)) return 1; continue; } @@ -1043,7 +1051,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; @@ -1120,8 +1128,8 @@ star: 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) @@ -1139,7 +1147,7 @@ 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; @@ -1153,7 +1161,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; @@ -1195,7 +1203,7 @@ tws_special(char *ap) { int i; time_t clock; - register struct tws *tw; + struct tws *tw; time(&clock); if (!mh_strcasecmp(ap, "today")) @@ -1234,19 +1242,17 @@ TWSaction(params) plist { int state; - register char *bp; + char *bp; char buf[BUFSIZ], name[NAMESZ]; - register struct tws *tw; + struct tws *tw; fseek(fp, start, SEEK_SET); for (state = FLD, bp = NULL;;) { switch (state = m_getfld(state, name, buf, sizeof buf, fp)) { case FLD: - case FLDEOF: case FLDPLUS: if (bp != NULL) { - free(bp); - bp = NULL; + mh_free0(&bp); } bp = getcpy(buf); while (state == FLDPLUS) { @@ -1256,18 +1262,16 @@ plist } if (!mh_strcasecmp(name, n->n_datef)) break; - if (state != FLDEOF) - continue; + continue; case BODY: - case BODYEOF: case FILEEOF: case LENERR: case FMTERR: if (state == LENERR || state == FMTERR) advise(NULL, "format error in message %d", msgnum); if (bp != NULL) - free(bp); + mh_free0(&bp); return 0; default: @@ -1284,6 +1288,6 @@ plist : (twsort(tw, &n->n_tws) < 0); if (bp != NULL) - free(bp); + mh_free0(&bp); return state; }