X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fpick.c;h=f700a0c7fe25a0fe710bcc9d961fa9ab4e795b5f;hp=7f0d3a9a256f040a44f0cc7d393617feac5f92b5;hb=ec2171174c019bdc83002cc29d06357e30b4b90d;hpb=f826c136f3bee802c63cef0510bcd8de71ccbe84 diff --git a/uip/pick.c b/uip/pick.c index 7f0d3a9..f700a0c 100644 --- a/uip/pick.c +++ b/uip/pick.c @@ -1088,7 +1088,7 @@ GREPaction(struct field *f, int msgnum, void *data) { struct grep_data *g = data; int ret; - char *buf; + char buf[BUFSIZ]; if (!g->header && *f->name) { return FALSE; @@ -1099,15 +1099,18 @@ GREPaction(struct field *f, int msgnum, void *data) return FALSE; } - ret = regexec(g->preg, f->value, 0, NULL, 0) == REG_NOMATCH; + if(decode_rfc2047(f->value, buf, sizeof(buf))) { + ret = regexec(g->preg, buf, 0, NULL, 0); + } else { + ret = regexec(g->preg, f->value, 0, NULL, 0); + } switch (ret) { case 0: return TRUE; case REG_NOMATCH: return FALSE; default: - buf = mh_xcalloc(BUFSIZ, sizeof(char)); - regerror(ret, g->preg, buf, BUFSIZ*sizeof(char)); + regerror(ret, g->preg, buf, sizeof(buf)); fprintf(stderr, "%s\n", buf); return FALSE; } @@ -1327,6 +1330,7 @@ createpickthread(char *msgs) for (i = 0; i < files.size; i++) { buf = getthreadid(files.msgs[i]); if (!buf) { + adios(EX_DATAERR, NULL, "message %s is not part of a thread", basename(files.msgs[i])); continue; } @@ -1363,7 +1367,7 @@ createonethread(char *c) bd->left = left; bd->right = right; - gd->header = "message-id"; + gd->header = mh_xstrdup("message-id"); snprintf(buf, sizeof(buf), "^[ \t]*<%s>", c); if(!gcompile(gd, buf)) { @@ -1372,7 +1376,7 @@ createonethread(char *c) } gd = right->data; - gd->header = "references"; + gd->header = mh_xstrdup("references"); snprintf(buf, sizeof(buf), "^[ \t]*<%s>", c); if(!gcompile(gd, buf)) {