[telepathy-gabble/master] parse_data_form: ensure to not add twice the name search key

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Tue Aug 25 06:34:47 PDT 2009


---
 src/search-channel.c |   29 ++++++++++++++++++++++++++---
 1 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/search-channel.c b/src/search-channel.c
index 7a5a8e3..42a44da 100644
--- a/src/search-channel.c
+++ b/src/search-channel.c
@@ -271,6 +271,21 @@ parse_unextended_field_response (
   return search_keys;
 }
 
+static gboolean
+name_in_array (GPtrArray *array,
+    const gchar *name)
+{
+  guint i;
+
+  for (i = 0; i < array->len; i++)
+    {
+      if (!tp_strdiff (g_ptr_array_index (array, i), name))
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
 static GPtrArray *
 parse_data_form (
     GabbleSearchChannel *self,
@@ -341,9 +356,17 @@ parse_data_form (
       tp_name = g_hash_table_lookup (xmpp_to_tp, var);
       if (tp_name != NULL)
         {
-          g_ptr_array_add (search_keys, tp_name);
-          g_hash_table_insert (self->priv->tp_to_xmpp, g_strdup (tp_name),
-              g_strdup (var));
+          if (name_in_array (search_keys, tp_name))
+            {
+              DEBUG ("%s has already been added as a search key; Skipping",
+                  tp_name);
+            }
+          else
+            {
+              g_ptr_array_add (search_keys, tp_name);
+              g_hash_table_insert (self->priv->tp_to_xmpp, g_strdup (tp_name),
+                  g_strdup (var));
+            }
         }
       else
         {
-- 
1.5.6.5




More information about the telepathy-commits mailing list