changeset 1063:4e62941df777

roster.c: refactor some functions Remove some duplicated code.
author Mikael Berthe <mikael@lilotux.net>
date Fri, 01 Dec 2006 20:16:18 +0100
parents 9207f2efb921
children 516b5f7d1023
files mcabber/src/roster.c
diffstat 1 files changed, 37 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/roster.c	Thu Nov 30 23:50:41 2006 +0100
+++ b/mcabber/src/roster.c	Fri Dec 01 20:16:18 2006 +0100
@@ -114,24 +114,29 @@
 
 /* ### Resources functions ### */
 
+static inline void free_resource_data(res *p_res)
+{
+  if (!p_res)
+    return;
+  g_free((gchar*)p_res->status_msg);
+  g_free((gchar*)p_res->name);
+  g_free((gchar*)p_res->realjid);
+#ifdef JEP0022
+  g_free(p_res->jep22.last_msgid_sent);
+  g_free(p_res->jep22.last_msgid_rcvd);
+#endif
+#ifdef HAVE_GPGME
+  g_free(p_res->pgpdata.sign_keyid);
+#endif
+  g_free(p_res);
+}
+
 static void free_all_resources(GSList **reslist)
 {
   GSList *lip;
-  res *p_res;
 
-  for ( lip = *reslist; lip ; lip = g_slist_next(lip)) {
-    p_res = (res*)lip->data;
-    g_free((gchar*)p_res->status_msg);
-    g_free((gchar*)p_res->name);
-    g_free((gchar*)p_res->realjid);
-#ifdef JEP0022
-    g_free(p_res->jep22.last_msgid_sent);
-    g_free(p_res->jep22.last_msgid_rcvd);
-#endif
-#ifdef HAVE_GPGME
-    g_free(p_res->pgpdata.sign_keyid);
-#endif
-  }
+  for (lip = *reslist; lip ; lip = g_slist_next(lip))
+    free_resource_data((res*)lip->data);
   // Free all nodes but the first (which is static)
   g_slist_free(*reslist);
   *reslist = NULL;
@@ -222,16 +227,7 @@
   }
 
   // Free allocations and delete resource node
-  g_free(p_res->name);
-  g_free(p_res->status_msg);
-  g_free(p_res->realjid);
-#ifdef JEP0022
-  g_free(p_res->jep22.last_msgid_sent);
-  g_free(p_res->jep22.last_msgid_rcvd);
-#endif
-#ifdef HAVE_GPGME
-  g_free(p_res->pgpdata.sign_keyid);
-#endif
+  free_resource_data(p_res);
   rost->resource = g_slist_delete_link(rost->resource, p_res_elt);
   return;
 }
@@ -239,6 +235,19 @@
 
 /* ### Roster functions ### */
 
+static inline void free_roster_user_data(roster *roster_usr)
+{
+  if (!roster_usr)
+    return;
+  g_free((gchar*)roster_usr->jid);
+  g_free((gchar*)roster_usr->name);
+  g_free((gchar*)roster_usr->nickname);
+  g_free((gchar*)roster_usr->topic);
+  g_free((gchar*)roster_usr->offline_status_message);
+  free_all_resources(&roster_usr->resource);
+  g_free(roster_usr);
+}
+
 // Comparison function used to search in the roster (compares jids and types)
 static gint roster_compare_jid_type(roster *a, roster *b) {
   if (! (a->type & b->type))
@@ -402,14 +411,8 @@
   if (roster_usr->flags & ROSTER_FLAG_MSG)
     unread_jid_add(roster_usr->jid);
 
-  // Let's free memory (jid, name, status message)
-  g_free((gchar*)roster_usr->jid);
-  g_free((gchar*)roster_usr->name);
-  g_free((gchar*)roster_usr->nickname);
-  g_free((gchar*)roster_usr->topic);
-  g_free((gchar*)roster_usr->offline_status_message);
-  free_all_resources(&roster_usr->resource);
-  g_free(roster_usr);
+  // Let's free roster_usr memory (jid, name, status message...)
+  free_roster_user_data(roster_usr);
 
   // That's a little complex, we need to dereference twice
   sl_group = ((roster*)sl_user->data)->list;
@@ -445,14 +448,8 @@
       // If there is a pending unread message, keep track of it
       if (roster_usr->flags & ROSTER_FLAG_MSG)
         unread_jid_add(roster_usr->jid);
-      // Free name and jid
-      g_free((gchar*)roster_usr->jid);
-      g_free((gchar*)roster_usr->name);
-      g_free((gchar*)roster_usr->nickname);
-      g_free((gchar*)roster_usr->topic);
-      g_free((gchar*)roster_usr->offline_status_message);
-      free_all_resources(&roster_usr->resource);
-      g_free(roster_usr);
+      // Free roster_usr data (jid, name, status message...)
+      free_roster_user_data(roster_usr);
       sl_usr = g_slist_next(sl_usr);
     }
     // Free group's users list