#endif
{
'x', M_REFERENCE, 0, eat_regexp}, {
#endif
{
'x', M_REFERENCE, 0, eat_regexp}, {
'y', M_XLABEL, 0, eat_regexp}, {
'z', M_SIZE, 0, eat_range}, {
'=', M_DUPLICATED, 0, NULL}, {
'$', M_UNREFERENCED, 0, NULL}, {
'*', M_REALNAME, 0, NULL}, {
'y', M_XLABEL, 0, eat_regexp}, {
'z', M_SIZE, 0, eat_range}, {
'=', M_DUPLICATED, 0, NULL}, {
'$', M_UNREFERENCED, 0, NULL}, {
'*', M_REALNAME, 0, NULL}, {
/* search the file "fp" */
while (lng > 0) {
if (pat->op == M_HEADER) {
if (*(buf = mutt_read_rfc822_line (fp, buf, &blen)) == '\0')
break;
/* search the file "fp" */
while (lng > 0) {
if (pat->op == M_HEADER) {
if (*(buf = mutt_read_rfc822_line (fp, buf, &blen)) == '\0')
break;
break; /* don't loop forever */
if (patmatch (pat, buf) == 0) {
match = 1;
break; /* don't loop forever */
if (patmatch (pat, buf) == 0) {
match = 1;
if (mutt_extract_token (&buf, s, M_TOKEN_PATTERN | M_TOKEN_COMMENT) != 0 ||
!buf.data) {
snprintf (err->data, err->dsize, _("Error in expression: %s"), s->dptr);
return (-1);
}
if (mutt_extract_token (&buf, s, M_TOKEN_PATTERN | M_TOKEN_COMMENT) != 0 ||
!buf.data) {
snprintf (err->data, err->dsize, _("Error in expression: %s"), s->dptr);
return (-1);
}
#if 0
/* If there are no RE metacharacters, use simple search anyway */
if (!pat->stringmatch && !strpbrk (buf.data, "|[{.*+?^$"))
#if 0
/* If there are no RE metacharacters, use simple search anyway */
if (!pat->stringmatch && !strpbrk (buf.data, "|[{.*+?^$"))
if (r) {
regerror (r, pat->rx, err->data, err->dsize);
regfree (pat->rx);
if (r) {
regerror (r, pat->rx, err->data, err->dsize);
regfree (pat->rx);
if (isdigit ((unsigned char) *pc)) {
/* mininum date specified */
if ((pc = getDate (pc, &min, err)) == NULL) {
if (isdigit ((unsigned char) *pc)) {
/* mininum date specified */
if ((pc = getDate (pc, &min, err)) == NULL) {
max.tm_mday = min.tm_mday;
if (!parse_date_range (pc, &min, &max, haveMin, &baseMin, err)) { /* bail out on any parsing error */
max.tm_mday = min.tm_mday;
if (!parse_date_range (pc, &min, &max, haveMin, &baseMin, err)) { /* bail out on any parsing error */
pat->min = mutt_mktime (&min, 1);
pat->max = mutt_mktime (&max, 1);
pat->min = mutt_mktime (&min, 1);
pat->max = mutt_mktime (&max, 1);
/* compile the sub-expression */
buf = str_substrdup (ps.dptr + 1, p);
if ((tmp = mutt_pattern_comp (buf, flags, err)) == NULL) {
/* compile the sub-expression */
buf = str_substrdup (ps.dptr + 1, p);
if ((tmp = mutt_pattern_comp (buf, flags, err)) == NULL) {
&& patmatch (pat, h->env->spam->data) == 0));
case M_DUPLICATED:
return (pat->not ^ (h->thread && h->thread->duplicate_thread));
&& patmatch (pat, h->env->spam->data) == 0));
case M_DUPLICATED:
return (pat->not ^ (h->thread && h->thread->duplicate_thread));
+
+ case M_MIMEATTACH:
+ {
+ int count;
+
+ if (h->content->parts)
+ count = mutt_count_body_parts(h, 0);
+ else {
+ mutt_parse_mime_message(ctx, h);
+ count = mutt_count_body_parts(h, 0);
+ mutt_free_body(&h->content->parts);
+ }
+
+ return (pat->not ^ (count >= pat->min && (pat->max == M_MAXRANGE ||
+ count <= pat->max)));
+ }
+
strfcpy (buf, NONULL (Context->pattern), sizeof (buf));
if (prompt || op != M_LIMIT)
strfcpy (buf, NONULL (Context->pattern), sizeof (buf));
if (prompt || op != M_LIMIT)
- if (mutt_get_field (prompt, buf, sizeof (buf), M_PATTERN | M_CLEAR) != 0)
+ if (mutt_get_field (prompt, buf, sizeof (buf), M_PATTERN | M_CLEAR) != 0 || !buf[0])
err.data = error;
err.dsize = sizeof (error);
if ((pat = mutt_pattern_comp (buf, M_FULL_MSG, &err)) == NULL) {
err.data = error;
err.dsize = sizeof (error);
if ((pat = mutt_pattern_comp (buf, M_FULL_MSG, &err)) == NULL) {
if (Context->limit_pattern)
mutt_pattern_free (&Context->limit_pattern);
if (Context->msgcount && !Context->vcount) {
if (Context->limit_pattern)
mutt_pattern_free (&Context->limit_pattern);
if (Context->msgcount && !Context->vcount) {