static int eat_regexp (pattern_t * pat, BUFFER *, BUFFER *);
static int eat_date (pattern_t * pat, BUFFER *, BUFFER *);
static int eat_range (pattern_t * pat, BUFFER *, BUFFER *);
static int patmatch (const pattern_t* pat, const char* buf);
static int eat_regexp (pattern_t * pat, BUFFER *, BUFFER *);
static int eat_date (pattern_t * pat, BUFFER *, BUFFER *);
static int eat_range (pattern_t * pat, BUFFER *, BUFFER *);
static int patmatch (const pattern_t* pat, const char* buf);
int tag; /* character used to represent this op */
int op; /* operation to perform */
int class;
int (*eat_arg)(pattern_t *, BUFFER *, BUFFER *);
int tag; /* character used to represent this op */
int op; /* operation to perform */
int class;
int (*eat_arg)(pattern_t *, BUFFER *, BUFFER *);
{'A', M_ALL, 0, NULL},
{'b', M_BODY, M_FULL_MSG, eat_regexp},
{'B', M_WHOLE_MSG, M_FULL_MSG, eat_regexp},
{'A', M_ALL, 0, NULL},
{'b', M_BODY, M_FULL_MSG, eat_regexp},
{'B', M_WHOLE_MSG, M_FULL_MSG, eat_regexp},
{'u', M_SUBSCRIBED_LIST, 0, NULL},
{'v', M_COLLAPSED, 0, NULL},
{'V', M_CRYPT_VERIFIED, 0, NULL},
{'u', M_SUBSCRIBED_LIST, 0, NULL},
{'v', M_COLLAPSED, 0, NULL},
{'V', M_CRYPT_VERIFIED, 0, NULL},
{'x', M_REFERENCE, 0, eat_regexp},
{'X', M_MIMEATTACH, 0, eat_range},
{'y', M_XLABEL, 0, eat_regexp},
{'x', M_REFERENCE, 0, eat_regexp},
{'X', M_MIMEATTACH, 0, eat_range},
{'y', M_XLABEL, 0, eat_regexp},
/* if no uppercase letters are given, do a case-insensitive search */
int mutt_which_case (const char *s)
{
/* if no uppercase letters are given, do a case-insensitive search */
int mutt_which_case (const char *s)
{
- s.fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL);
+ s.fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(mod_core.tmpdir), NULL);
if (pat->op != M_HEADER) {
mutt_parse_mime_message (ctx, h);
if (pat->op != M_HEADER) {
mutt_parse_mime_message (ctx, h);
fseeko (msg->fp, h->offset, 0);
mutt_body_handler (h->content, &s);
}
fseeko (msg->fp, h->offset, 0);
mutt_body_handler (h->content, &s);
}
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);
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);
regerror (r, pat->rx, err->data, err->dsize);
regfree (pat->rx);
p_delete(&pat->rx);
regerror (r, pat->rx, err->data, err->dsize);
regfree (pat->rx);
p_delete(&pat->rx);
if ((flag & M_PDR_ERROR) && !(flag & M_PDR_ABSOLUTE)) { /* getDate has its own error message, don't overwrite it here */
snprintf (err->data, err->dsize, _("Invalid relative date: %s"), pc - 1);
}
if ((flag & M_PDR_ERROR) && !(flag & M_PDR_ABSOLUTE)) { /* getDate has its own error message, don't overwrite it here */
snprintf (err->data, err->dsize, _("Invalid relative date: %s"), pc - 1);
}
if (mutt_extract_token (&buffer, s, M_TOKEN_COMMENT | M_TOKEN_PATTERN) != 0
|| !buffer.data) {
m_strcpy(err->data, err->dsize, _("error in expression"));
if (mutt_extract_token (&buffer, s, M_TOKEN_COMMENT | M_TOKEN_PATTERN) != 0
|| !buffer.data) {
m_strcpy(err->data, err->dsize, _("error in expression"));
/* mininum date specified */
if ((pc = getDate (pc, &min, err)) == NULL) {
p_delete(&buffer.data);
/* mininum date specified */
if ((pc = getDate (pc, &min, err)) == NULL) {
p_delete(&buffer.data);
if (!parse_date_range (pc, &min, &max, haveMin, &baseMin, err)) { /* bail out on any parsing error */
p_delete(&buffer.data);
if (!parse_date_range (pc, &min, &max, haveMin, &baseMin, err)) { /* bail out on any parsing error */
p_delete(&buffer.data);
/* Since we allow two dates to be specified we'll have to adjust that. */
adjust_date_range (&min, &max);
/* Since we allow two dates to be specified we'll have to adjust that. */
adjust_date_range (&min, &max);
- pat->min = mutt_mktime (&min, 1);
- pat->max = mutt_mktime (&max, 1);
+ pat->min = mktime(&min);
+ pat->max = mktime(&max);
ps.dptr++; /* move past the ~ */
if ((entry = lookup_tag (*ps.dptr)) == NULL) {
snprintf (err->data, err->dsize, _("%c: invalid command"), *ps.dptr);
ps.dptr++; /* move past the ~ */
if ((entry = lookup_tag (*ps.dptr)) == NULL) {
snprintf (err->data, err->dsize, _("%c: invalid command"), *ps.dptr);
return NULL;
}
if (entry->class && (flags & entry->class) == 0) {
snprintf (err->data, err->dsize, _("%c: not supported in this mode"),
*ps.dptr);
return NULL;
}
if (entry->class && (flags & entry->class) == 0) {
snprintf (err->data, err->dsize, _("%c: not supported in this mode"),
*ps.dptr);
if (*p != ')') {
snprintf (err->data, err->dsize, _("mismatched parenthesis: %s"),
ps.dptr);
if (*p != ')') {
snprintf (err->data, err->dsize, _("mismatched parenthesis: %s"),
ps.dptr);
return NULL;
}
/* compile the sub-expression */
buf = p_dupstr(ps.dptr + 1, p - ps.dptr - 1);
if ((tmp = mutt_pattern_comp (buf, flags, err)) == NULL) {
p_delete(&buf);
return NULL;
}
/* compile the sub-expression */
buf = p_dupstr(ps.dptr + 1, p - ps.dptr - 1);
if ((tmp = mutt_pattern_comp (buf, flags, err)) == NULL) {
p_delete(&buf);
break;
default:
snprintf (err->data, err->dsize, _("error in pattern at: %s"), ps.dptr);
break;
default:
snprintf (err->data, err->dsize, _("error in pattern at: %s"), ps.dptr);
(match_personal && a->personal &&
patmatch (pat, a->personal) == 0))) {
va_end (ap);
(match_personal && a->personal &&
patmatch (pat, a->personal) == 0))) {
va_end (ap);
- return (pat->not ^ (perform_and (pat->child, flags, ctx, h) > 0));
+ return pat->not ^ (perform_and (pat->child, flags, ctx, h) > 0);
- return (pat->not ^ (perform_or (pat->child, flags, ctx, h) > 0));
+ return pat->not ^ (perform_or (pat->child, flags, ctx, h) > 0);
case M_BODY:
case M_HEADER:
case M_WHOLE_MSG:
/* IMAP search sets h->matched at search compile time */
if (ctx->magic == M_IMAP && pat->stringmatch)
case M_BODY:
case M_HEADER:
case M_WHOLE_MSG:
/* IMAP search sets h->matched at search compile time */
if (ctx->magic == M_IMAP && pat->stringmatch)
case M_SENDER:
return (pat->not ^ match_adrlist (pat, flags & M_MATCH_FULL_ADDRESS,
pat->alladdr, 1, h->env->sender));
case M_SENDER:
return (pat->not ^ match_adrlist (pat, flags & M_MATCH_FULL_ADDRESS,
pat->alladdr, 1, h->env->sender));
not ^ (h->env->spam && h->env->spam->data
&& patmatch (pat, h->env->spam->data) == 0));
case M_DUPLICATED:
not ^ (h->env->spam && h->env->spam->data
&& patmatch (pat, h->env->spam->data) == 0));
case M_DUPLICATED:
m_strcpy(buf, sizeof(buf), NONULL(Context->pattern));
if (prompt || op != M_LIMIT)
if (mutt_get_field (prompt, buf, sizeof (buf), M_PATTERN | M_CLEAR) != 0 || !buf[0])
m_strcpy(buf, sizeof(buf), NONULL(Context->pattern));
if (prompt || op != M_LIMIT)
if (mutt_get_field (prompt, buf, sizeof (buf), M_PATTERN | M_CLEAR) != 0 || !buf[0])
if ((pat = mutt_pattern_comp (buf, M_FULL_MSG, &err)) == NULL) {
p_delete(&simple);
mutt_error ("%s", err.data);
if ((pat = mutt_pattern_comp (buf, M_FULL_MSG, &err)) == NULL) {
p_delete(&simple);
mutt_error ("%s", err.data);
/* drop previous limit pattern */
p_delete(&Context->pattern);
if (Context->limit_pattern)
/* drop previous limit pattern */
p_delete(&Context->pattern);
if (Context->limit_pattern)
if (mutt_get_field ((op == OP_SEARCH) ? _("Search for: ") :
_("Reverse search for: "), buf, sizeof (buf),
M_CLEAR | M_PATTERN) != 0 || !buf[0])
if (mutt_get_field ((op == OP_SEARCH) ? _("Search for: ") :
_("Reverse search for: "), buf, sizeof (buf),
M_CLEAR | M_PATTERN) != 0 || !buf[0])
m_strcpy(LastSearch, sizeof(LastSearch), buf);
mutt_message _("Compiling search pattern...");
m_strcpy(LastSearch, sizeof(LastSearch), buf);
mutt_message _("Compiling search pattern...");
err.data = error;
err.dsize = sizeof (error);
if ((SearchPattern =
mutt_pattern_comp (temp, M_FULL_MSG, &err)) == NULL) {
mutt_error ("%s", error);
err.data = error;
err.dsize = sizeof (error);
if ((SearchPattern =
mutt_pattern_comp (temp, M_FULL_MSG, &err)) == NULL) {
mutt_error ("%s", error);