aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-mime-utils.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2002-04-05 08:08:23 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2002-04-05 08:08:23 +0800
commit49e82f8b9fb67aba12f536c6ea29a640b7a10104 (patch)
tree74f0a25c023551fa3839ee2ed231536bd4ef9d77 /camel/camel-mime-utils.c
parentbee1faf0a3ad4d71b76a831466b955bdde00e95d (diff)
downloadgsoc2013-evolution-49e82f8b9fb67aba12f536c6ea29a640b7a10104.tar.gz
gsoc2013-evolution-49e82f8b9fb67aba12f536c6ea29a640b7a10104.tar.zst
gsoc2013-evolution-49e82f8b9fb67aba12f536c6ea29a640b7a10104.zip
Simplified since we can now decode in-reply-to without getting extra
2002-04-04 Jeffrey Stedfast <fejj@ximian.com> * camel-folder-summary.c (message_info_new): Simplified since we can now decode in-reply-to without getting extra cruft. Get rid of the FIXME about having to check scan->id because of the possibility of it being NULL, this can no longer happen. * camel-mime-utils.c (header_references_inreplyto_decode): New function to decode in-reply-to headers. Only grabs the first thing that looks like a message-id and then returns. (header_references_decode): Loop calling header_references_decode_single (a new internal function). svn path=/trunk/; revision=16361
Diffstat (limited to 'camel/camel-mime-utils.c')
-rw-r--r--camel/camel-mime-utils.c59
1 files changed, 42 insertions, 17 deletions
diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c
index 86a8021cba..beff671e96 100644
--- a/camel/camel-mime-utils.c
+++ b/camel/camel-mime-utils.c
@@ -2675,37 +2675,62 @@ header_references_list_clear(struct _header_references **list)
*list = NULL;
}
-/* generate a list of references, from most recent up */
-struct _header_references *
-header_references_decode(const char *in)
+static void
+header_references_decode_single (const char **in, struct _header_references **head)
{
- const char *inptr = in;
- struct _header_references *head = NULL, *node;
+ struct _header_references *ref;
+ const char *inptr = *in;
char *id, *word;
-
- if (in == NULL || in[0] == '\0')
- return NULL;
-
+
while (*inptr) {
- header_decode_lwsp(&inptr);
+ header_decode_lwsp (&inptr);
if (*inptr == '<') {
- id = header_msgid_decode_internal(&inptr);
+ id = header_msgid_decode_internal (&inptr);
if (id) {
- node = g_malloc(sizeof(*node));
- node->next = head;
- head = node;
- node->id = id;
+ ref = g_malloc (sizeof (struct _header_references));
+ ref->next = *head;
+ ref->id = id;
+ *head = ref;
+ break;
}
} else {
- word = header_decode_word(&inptr);
+ word = header_decode_word (&inptr);
if (word)
g_free (word);
else if (*inptr != '\0')
inptr++; /* Stupid mailer tricks */
}
}
+
+ *in = inptr;
+}
- return head;
+struct _header_references *
+header_references_inreplyto_decode (const char *in)
+{
+ struct _header_references *ref = NULL;
+
+ if (in == NULL || in[0] == '\0')
+ return NULL;
+
+ header_references_decode_single (&in, &ref);
+
+ return ref;
+}
+
+/* generate a list of references, from most recent up */
+struct _header_references *
+header_references_decode (const char *in)
+{
+ struct _header_references *refs = NULL;
+
+ if (in == NULL || in[0] == '\0')
+ return NULL;
+
+ while (*in)
+ header_references_decode_single (&in, &refs);
+
+ return refs;
}
struct _header_references *