X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fpicksbr.c;h=91893e3cbf89f71138e39b0405d785bddf51a94b;hb=80bf776d0a4587c477bb8a248b9dbe1a31e74575;hp=bd4c263e614d9f1566ccb567a354f00034ff0a53;hpb=5dd6771b28c257af405d7248639ed0e3bcdce38b;p=mmh diff --git a/uip/picksbr.c b/uip/picksbr.c index bd4c263..91893e3 100644 --- a/uip/picksbr.c +++ b/uip/picksbr.c @@ -12,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 @@ -84,9 +78,10 @@ static struct swit parswit[] = { static char linebuf[LBSIZE + 1]; +static char decoded_linebuf[LBSIZE + 1]; /* the magic array for case-independence */ -static char cc[] = { +static unsigned char cc[] = { 0000,0001,0002,0003,0004,0005,0006,0007, 0010,0011,0012,0013,0014,0015,0016,0017, 0020,0021,0022,0023,0024,0025,0026,0027, @@ -181,23 +176,23 @@ static struct nexus *head; /* * prototypes for date routines */ -static struct tws *tws_parse(); -static struct tws *tws_special(); +static struct tws *tws_parse(char *, int); +static struct tws *tws_special(char *); /* * static prototypes */ -static void PRaction(); -static int gcompile(); -static int advance(); -static int cclass(); -static int tcompile(); - -static struct nexus *parse(); -static struct nexus *nexp1(); -static struct nexus *nexp2(); -static struct nexus *nexp3(); -static struct nexus *newnexus(); +static void PRaction(struct nexus *, int); +static int gcompile(struct nexus *, char *); +static int advance(char *, char *); +static int cclass(unsigned char *, int, int); +static int tcompile(char *, struct tws *, int); + +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 int ORaction(); static int ANDaction(); @@ -666,6 +661,7 @@ plist long pos = start; register char *p1, *p2, *ebp, *cbp; char ibuf[BUFSIZ]; + NMH_UNUSED (msgnum); fseek (fp, start, SEEK_SET); body = 0; @@ -706,7 +702,8 @@ plist break; } lf++; - c = ' '; + /* Unfold by skipping the newline. */ + c = 0; } } if (c && p1 < &linebuf[LBSIZE - 1]) @@ -718,6 +715,13 @@ 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)) return 1; @@ -939,6 +943,7 @@ plist register char *bp; char buf[BUFSIZ], name[NAMESZ]; register struct tws *tw; + NMH_UNUSED (stop); fseek (fp, start, SEEK_SET); for (state = FLD, bp = NULL;;) {