aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-mime-utils.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2001-02-06 10:38:19 +0800
committerMichael Zucci <zucchi@src.gnome.org>2001-02-06 10:38:19 +0800
commitb8af62e80361d12c4ecc9279817be30df2ebf538 (patch)
tree8e4835aa83fcada2184825d51a0fbccdec1e4eb7 /camel/camel-mime-utils.c
parent2fd6f5acb552cbdc7a65536260b973512bb845b6 (diff)
downloadgsoc2013-evolution-b8af62e80361d12c4ecc9279817be30df2ebf538.tar.gz
gsoc2013-evolution-b8af62e80361d12c4ecc9279817be30df2ebf538.tar.zst
gsoc2013-evolution-b8af62e80361d12c4ecc9279817be30df2ebf538.zip
Removed unwanted header. It was never put in for a reason. Stop fixing
2001-02-06 Not Zed <NotZed@Ximian.com> * camel-search-private.c: Removed unwanted header. It was never put in for a reason. Stop fixing irrelevant warnings. (camel_ustrstrcase): Our own strstrcase impl for utf8 strings. (camel_ustrcasecmp): Ditto for strcasecmp. (camel_ustrncasecmp): And strncasecmp. (utf8_get): Simpler interface to utf8 string processing. (camel_search_header_match): Use the new things. 2001-02-05 Not Zed <NotZed@Ximian.com> * camel-folder.c (get_summary): Removed some old variables/a small memleak. (free_summary): Removed old variables. * camel-mime-utils.c (header_raw_check_mailing_list): New utility function to get the mailing list (if any) that a set of headers came from. svn path=/trunk/; revision=8008
Diffstat (limited to 'camel/camel-mime-utils.c')
-rw-r--r--camel/camel-mime-utils.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c
index 0b77dbe9c8..7b63baae14 100644
--- a/camel/camel-mime-utils.c
+++ b/camel/camel-mime-utils.c
@@ -41,6 +41,8 @@
#include <ctype.h>
#include <errno.h>
+#include <regex.h>
+
#include "camel-mime-utils.h"
#include "camel-charset-map.h"
@@ -2892,6 +2894,42 @@ header_raw_clear(struct _header_raw **list)
*list = NULL;
}
+static struct {
+ char *name;
+ char *pattern;
+} mail_list_magic[] = {
+ { "Sender", "^Sender: owner-([^@]+)" },
+ { "X-BeenThere", "^X-BeenThere: ([^@]+)" },
+ { "Delivered-To", "^Delivered-To: mailing list ([^@]+)" },
+ { "X-Mailing-List", "^X-Mailing-List: ([^@]+)" },
+ { "X-Loop", "^X-Loop: ([^@]+)" },
+ { "List-Id", "^List-Id: ([^<]+)" },
+};
+
+char *
+header_raw_check_mailing_list(struct _header_raw **list)
+{
+ const char *v;
+ regex_t pattern;
+ regmatch_t match[1];
+ int i;
+
+ for (i=0;i<sizeof(mail_list_magic)/sizeof(mail_list_magic[0]);i++) {
+ if (regcomp(&pattern, mail_list_magic[i].pattern, REG_EXTENDED|REG_ICASE) == -1) {
+ g_warning("Internal error, compiling regex failed: %s: %s", mail_list_magic[i].pattern, strerror(errno));
+ continue;
+ }
+
+ v = header_raw_find(list, mail_list_magic[i].name, NULL);
+ if (v != NULL && regexec(&pattern, v, 1, match, 0) == 0 && match[0].rm_so != -1) {
+ regfree(&pattern);
+ return g_strndup(v+match[0].rm_so, match[0].rm_eo-match[0].rm_so);
+ }
+ regfree(&pattern);
+ }
+
+ return NULL;
+}
/* ok, here's the address stuff, what a mess ... */
struct _header_address *header_address_new(void)