X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fpicksbr.c;h=85bc4bcdeab3434263fad7a7ff253d28dcbfc47d;hb=3a84d814004fd4557bf4f44952648e9e69bd22a8;hp=001bf08c4617d95cb9a71edd466be78f90fc27a5;hpb=dc0b0be755b41f3c195913631fedf023ad69192e;p=mmh diff --git a/uip/picksbr.c b/uip/picksbr.c index 001bf08..85bc4bc 100644 --- a/uip/picksbr.c +++ b/uip/picksbr.c @@ -2,8 +2,6 @@ /* * picksbr.c -- routines to help pick along... * - * $Id$ - * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. @@ -14,16 +12,10 @@ #include #include -#ifdef TIME_WITH_SYS_TIME +#ifdef HAVE_SYS_TIME_H # include -# include -#else -# ifdef TM_IN_SYS_TIME -# include -# else -# include -# endif #endif +#include static struct swit parswit[] = { #define PRAND 0 @@ -196,9 +188,9 @@ static int cclass(); static int tcompile(); static struct nexus *parse(); -static struct nexus *exp1(); -static struct nexus *exp2(); -static struct nexus *exp3(); +static struct nexus *nexp1(); +static struct nexus *nexp2(); +static struct nexus *nexp3(); static struct nexus *newnexus(); static int ORaction(); @@ -239,7 +231,7 @@ parse (void) register char *cp; register struct nexus *n, *o; - if ((n = exp1 ()) == NULL || (cp = nxtarg ()) == NULL) + if ((n = nexp1 ()) == NULL || (cp = nxtarg ()) == NULL) return n; if (*cp != '-') { @@ -275,12 +267,12 @@ header: ; } static struct nexus * -exp1 (void) +nexp1 (void) { register char *cp; register struct nexus *n, *o; - if ((n = exp2 ()) == NULL || (cp = nxtarg ()) == NULL) + if ((n = nexp2 ()) == NULL || (cp = nxtarg ()) == NULL) return n; if (*cp != '-') { @@ -303,7 +295,7 @@ exp1 (void) case PRAND: o = newnexus (ANDaction); o->n_L_child = n; - if ((o->n_R_child = exp1 ())) + if ((o->n_R_child = nexp1 ())) return o; padvise (NULL, "missing conjunctive"); return NULL; @@ -317,7 +309,7 @@ header: ; static struct nexus * -exp2 (void) +nexp2 (void) { register char *cp; register struct nexus *n; @@ -327,7 +319,7 @@ exp2 (void) if (*cp != '-') { prvarg (); - return exp3 (); + return nexp3 (); } if (*++cp == '-') @@ -344,7 +336,7 @@ exp2 (void) case PRNOT: n = newnexus (NOTaction); - if ((n->n_L_child = exp3 ())) + if ((n->n_L_child = nexp3 ())) return n; padvise (NULL, "missing negation"); return NULL; @@ -352,12 +344,12 @@ exp2 (void) header: ; default: prvarg (); - return exp3 (); + return nexp3 (); } } static struct nexus * -exp3 (void) +nexp3 (void) { int i; register char *cp, *dp; @@ -448,7 +440,7 @@ exp3 (void) padvise (NULL, "missing argument to %s", argp[-2]); return NULL; } - return exp3 (); + return nexp3 (); case PRAFTR: case PRBEFR: @@ -538,7 +530,8 @@ PRaction (struct nexus *n, int level) dasctime (&n->n_tws, TW_NULL)); return; } - fprintf (stderr, "UNKNOWN(0x%x)\n", (unsigned int) (*n->n_action)); + fprintf (stderr, "UNKNOWN(0x%x)\n", + (unsigned int)(unsigned long) (*n->n_action)); } @@ -575,7 +568,7 @@ gcompile (struct nexus *n, char *astr) { register int c; int cclcnt; - register char *ep, *dp, *sp, *lastep = 0; + register unsigned char *ep, *dp, *sp, *lastep = 0; dp = (ep = n->n_expbuf) + sizeof n->n_expbuf; sp = astr; @@ -614,7 +607,7 @@ gcompile (struct nexus *n, char *astr) case '[': *ep++ = CCL; *ep++ = 0; - cclcnt = 1; + cclcnt = 0; if ((c = *sp++) == '^') { c = *sp++; ep[-2] = NCCL; @@ -639,6 +632,8 @@ gcompile (struct nexus *n, char *astr) goto cerror; } } while ((c = *sp++) != ']'); + if (cclcnt > 255) + goto cerror; lastep[1] = cclcnt; continue; @@ -661,6 +656,8 @@ static int GREPaction (params) plist { + NMH_UNUSED (msgnum); + int c, body, lf; long pos = start; register char *p1, *p2, *ebp, *cbp; @@ -744,14 +741,14 @@ plist static int advance (char *alp, char *aep) { - register char *lp, *ep, *curlp; + register unsigned char *lp, *ep, *curlp; - lp = alp; - ep = aep; + lp = (unsigned char *)alp; + ep = (unsigned char *)aep; for (;;) switch (*ep++) { case CCHR: - if (*ep++ == *lp++ || ep[-1] == cc[(unsigned char)lp[-1]]) + if (*ep++ == *lp++ || ep[-1] == cc[lp[-1]]) continue; return 0; @@ -770,14 +767,14 @@ advance (char *alp, char *aep) case CCL: if (cclass (ep, *lp++, 1)) { - ep += *ep; + ep += *ep + 1; continue; } return 0; case NCCL: if (cclass (ep, *lp++, 0)) { - ep += *ep; + ep += *ep + 1; continue; } return 0; @@ -790,7 +787,7 @@ advance (char *alp, char *aep) case CCHR | STAR: curlp = lp; - while (*lp++ == *ep || cc[(unsigned char)lp[-1]] == *ep) + while (*lp++ == *ep || cc[lp[-1]] == *ep) continue; ep++; goto star; @@ -800,7 +797,7 @@ advance (char *alp, char *aep) curlp = lp; while (cclass (ep, *lp++, ep[-1] == (CCL | STAR))) continue; - ep += *ep; + ep += *ep + 1; goto star; star: @@ -819,19 +816,18 @@ advance (char *alp, char *aep) static int -cclass (char *aset, int ac, int af) +cclass (unsigned char *aset, int ac, int af) { - register int n; - register char c, - *set; + register unsigned int n; + register unsigned char c, *set; set = aset; if ((c = ac) == 0) return (0); n = *set++; - while (--n) - if (*set++ == c || set[-1] == cc[(unsigned char)c]) + while (n--) + if (*set++ == c || set[-1] == cc[c]) return (af); return (!af); @@ -935,6 +931,8 @@ static int TWSaction (params) plist { + NMH_UNUSED (stop); + int state; register char *bp; char buf[BUFSIZ], name[NAMESZ];