[gmime] Fixed part iters to work for non-multipart messages
- From: Jeffrey Stedfast <fejj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime] Fixed part iters to work for non-multipart messages
- Date: Sat, 4 May 2013 12:41:52 +0000 (UTC)
commit 1de9ab2b87c38fac438d062e30c8c0caf742e3f4
Author: Jeffrey Stedfast <fejj gnome org>
Date: Sat May 4 08:41:32 2013 -0400
Fixed part iters to work for non-multipart messages
2013-05-04 Jeffrey Stedfast <fejj gnome org>
* gmime/gmime-part-iter.c: Modified to work for non-multipart
messages.
ChangeLog | 5 +++++
gmime/gmime-part-iter.c | 16 +++++++++++-----
tests/test-parser.c | 10 ++++------
3 files changed, 20 insertions(+), 11 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 0b5c845..51a24cb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2013-05-04 Jeffrey Stedfast <fejj gnome org>
+ * gmime/gmime-part-iter.c: Modified to work for non-multipart
+ messages.
+
+2013-05-04 Jeffrey Stedfast <fejj gnome org>
+
* gmime/gmime-utils.c (rfc2047_encode): Respect the new
GMIME_ENABLE_USE_ONLY_USER_CHARSETS initialization flag.
diff --git a/gmime/gmime-part-iter.c b/gmime/gmime-part-iter.c
index 88fda83..90fab93 100644
--- a/gmime/gmime-part-iter.c
+++ b/gmime/gmime-part-iter.c
@@ -140,7 +140,8 @@ g_mime_part_iter_free (GMimePartIter *iter)
g_object_unref (iter->toplevel);
g_array_free (iter->path, TRUE);
- g_slice_free_chain (GMimeObjectStack, iter->parent, parent);
+ if (iter->parent != NULL)
+ g_slice_free_chain (GMimeObjectStack, iter->parent, parent);
g_slice_free (GMimePartIter, iter);
}
@@ -166,8 +167,10 @@ g_mime_part_iter_reset (GMimePartIter *iter)
iter->parent = NULL;
iter->index = -1;
- /* set our initial 'current' part to our first child */
- g_mime_part_iter_next (iter);
+ if (!GMIME_IS_PART (iter->current)) {
+ /* set our initial 'current' part to our first child */
+ g_mime_part_iter_next (iter);
+ }
}
@@ -196,9 +199,12 @@ g_mime_part_iter_jump_to (GMimePartIter *iter, const char *path)
g_return_val_if_fail (iter != NULL, FALSE);
+ if (!path || !path[0])
+ return FALSE;
+
g_mime_part_iter_reset (iter);
- if (!path || !path[0])
+ if (!strcmp (path, "0"))
return TRUE;
parent = iter->parent->object;
@@ -449,7 +455,7 @@ g_mime_part_iter_get_parent (GMimePartIter *iter)
if (!g_mime_part_iter_is_valid (iter))
return NULL;
- return iter->parent->object;
+ return iter->parent ? iter->parent->object : NULL;
}
diff --git a/tests/test-parser.c b/tests/test-parser.c
index 82fd4aa..e5b7917 100644
--- a/tests/test-parser.c
+++ b/tests/test-parser.c
@@ -120,18 +120,19 @@ print_mime_struct_iter (GMimeMessage *message)
{
//const char *jump_to = "4.2.2.2";
GMimePartIter *iter;
+ GMimeObject *parent;
GMimeObject *part;
char *path;
iter = g_mime_part_iter_new ((GMimeObject *) message);
if (g_mime_part_iter_is_valid (iter)) {
- part = g_mime_part_iter_get_parent (iter);
- print_mime_part_info ("TEXT", part);
+ if ((parent = g_mime_part_iter_get_parent (iter)))
+ print_mime_part_info ("TEXT", parent);
do {
part = g_mime_part_iter_get_current (iter);
path = g_mime_part_iter_get_path (iter);
- print_mime_part_info (path, part);
+ print_mime_part_info (parent ? path : "TEXT", part);
g_free (path);
} while (g_mime_part_iter_next (iter));
@@ -146,9 +147,6 @@ print_mime_struct_iter (GMimeMessage *message)
fprintf (stdout, "Failed to jump to %s\n", jump_to);
}
#endif
- } else {
- part = g_mime_message_get_mime_part (message);
- print_mime_part_info ("TEXT", part);
}
g_mime_part_iter_free (iter);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]