Fix modest_tny_msg_header_get_all_recipients_list (in case from is empty)
[modest] / src / modest-pair.c
index 4d5adca..208ce9a 100644 (file)
  */
 
 #include "modest-pair.h"
+#include <string.h> /* For strcmp() */
+#include <stdio.h>
 
 ModestPair*
 modest_pair_new     (gpointer first, gpointer second, gboolean own)
 {
        ModestPair *pair;
 
-       pair = g_new (ModestPair, 1);
+       pair = g_slice_new (ModestPair);
 
-       pair->first = first;
+       pair->first  = first;
        pair->second = second;
-       pair->own = own;
+       pair->own    = own;
        
        return pair;
 }
 
 
 void
-modest_pair_destroy (ModestPair *pair)
+modest_pair_free (ModestPair *pair)
 {
        if (!pair)
                return;
@@ -54,20 +56,38 @@ modest_pair_destroy (ModestPair *pair)
                g_free (pair->first);
                g_free (pair->second);
        }
-       g_free (pair);
+       
+       g_slice_free (ModestPair, pair);
 }
 
 
 
-
-GSList*
-modest_pair_gslist_destroy (GSList *pairs)
+void
+modest_pair_list_free (ModestPairList *pairs)
 {
-       GSList *cursor = pairs;
+       ModestPairList *cursor = pairs;
        while (cursor) {
-               modest_pair_destroy ((ModestPair*)cursor->data);
+               modest_pair_free ((ModestPair*)cursor->data);
                cursor = cursor->next;
        }
        g_slist_free (pairs);
-       return NULL;
+}
+
+static gint on_pair_compare_as_string(gconstpointer a, gconstpointer b)
+{
+       const ModestPair* pair_a = (const ModestPair*)a;
+  const gchar* target = (const gchar*)b;
+  
+       return strcmp ((const gchar*)pair_a->first, target);
+}
+
+ModestPair* modest_pair_list_find_by_first_as_string  (ModestPairList *pairs, 
+       const gchar* first)
+{
+       GSList *matching = g_slist_find_custom (pairs, (gconstpointer)first, 
+               on_pair_compare_as_string);
+       if (matching)
+               return (ModestPair*)matching->data;
+       else
+               return NULL;
 }