static CamelSExpResult * header_regex (struct _CamelSExp *f, gint argc, struct _CamelSExpResult **argv, FilterMessageSearch *fms) { CamelSExpResult *r = camel_sexp_result_new (f, CAMEL_SEXP_RES_BOOL); CamelMimeMessage *message; regex_t pattern; gchar *contents = NULL; message = camel_filter_search_get_message (fms, f); if (argc > 1 && argv[0]->type == CAMEL_SEXP_RES_STRING && (contents = camel_search_get_header_decoded (argv[0]->value.string, camel_medium_get_header (CAMEL_MEDIUM (message), argv[0]->value.string), camel_search_get_default_charset_from_message (message))) && camel_search_build_match_regex (&pattern, CAMEL_SEARCH_MATCH_REGEX | CAMEL_SEARCH_MATCH_ICASE, argc - 1, argv + 1, fms->error) == 0) { r->value.boolean = regexec (&pattern, contents, 0, NULL, 0) == 0; regfree (&pattern); } else r->value.boolean = FALSE; g_free (contents); return r; }
static CamelSExpResult * body_contains (struct _CamelSExp *f, gint argc, struct _CamelSExpResult **argv, FilterMessageSearch *fms) { CamelSExpResult *r = camel_sexp_result_new (f, CAMEL_SEXP_RES_BOOL); CamelMimeMessage *message; regex_t pattern; if (camel_search_build_match_regex (&pattern, CAMEL_SEARCH_MATCH_ICASE, argc, argv, fms->error) == 0) { message = camel_filter_search_get_message (fms, f); r->value.boolean = camel_search_message_body_contains ((CamelDataWrapper *) message, &pattern); regfree (&pattern); } else r->value.boolean = FALSE; return r; }
static CamelSExpResult * header_full_regex (struct _CamelSExp *f, gint argc, struct _CamelSExpResult **argv, FilterMessageSearch *fms) { CamelSExpResult *r = camel_sexp_result_new (f, CAMEL_SEXP_RES_BOOL); CamelMimeMessage *message; regex_t pattern; gchar *contents; if (camel_search_build_match_regex (&pattern, CAMEL_SEARCH_MATCH_REGEX | CAMEL_SEARCH_MATCH_ICASE | CAMEL_SEARCH_MATCH_NEWLINE, argc, argv, fms->error) == 0) { message = camel_filter_search_get_message (fms, f); contents = get_full_header (message); r->value.boolean = regexec (&pattern, contents, 0, NULL, 0) == 0; g_free (contents); regfree (&pattern); } else r->value.boolean = FALSE; return r; }