[gmime] Fixed part iters to work for non-multipart messages



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]