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,
/*
* 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();
GREPaction (params)
plist
{
- NMH_UNUSED (msgnum);
-
int c, body, lf;
long pos = start;
register char *p1, *p2, *ebp, *cbp;
char ibuf[BUFSIZ];
+ NMH_UNUSED (msgnum);
fseek (fp, start, SEEK_SET);
body = 0;
break;
}
lf++;
- c = ' ';
+ /* Unfold by skipping the newline. */
+ c = 0;
}
}
if (c && p1 < &linebuf[LBSIZE - 1])
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;
TWSaction (params)
plist
{
- NMH_UNUSED (stop);
-
int state;
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;;) {