diff mcabber/src/commands.c @ 1072:2a3cfb98bd5e

Fix memory leaks after calls to buddy_getresources()
author Mikael Berthe <mikael@lilotux.net>
date Sun, 03 Dec 2006 19:29:50 +0100
parents 9eaacc0ad3a2
children 253e8988eb5c
line wrap: on
line diff
--- a/mcabber/src/commands.c	Sun Dec 03 12:00:17 2006 +0100
+++ b/mcabber/src/commands.c	Sun Dec 03 19:29:50 2006 +0100
@@ -1282,7 +1282,7 @@
   buffer = g_new(char, 4096);
 
   if (bjid) {
-    GSList *resources;
+    GSList *resources, *p_res;
     char *bstr = "unknown";
 
     // Enter chat mode
@@ -1320,21 +1320,21 @@
         scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
       }
     }
-    for ( ; resources ; resources = g_slist_next(resources) ) {
+    for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
       gchar rprio;
       enum imstatus rstatus;
       const char *rst_msg;
       time_t rst_time;
       struct pgp_data *rpgp;
 
-      rprio   = buddy_getresourceprio(bud, resources->data);
-      rstatus = buddy_getstatus(bud, resources->data);
-      rst_msg = buddy_getstatusmsg(bud, resources->data);
-      rst_time = buddy_getstatustime(bud, resources->data);
-      rpgp = buddy_resource_pgp(bud, resources->data);
+      rprio   = buddy_getresourceprio(bud, p_res->data);
+      rstatus = buddy_getstatus(bud, p_res->data);
+      rst_msg = buddy_getstatusmsg(bud, p_res->data);
+      rst_time = buddy_getstatustime(bud, p_res->data);
+      rpgp = buddy_resource_pgp(bud, p_res->data);
 
       snprintf(buffer, 4095, "Resource: [%c] (%d) %s", imstatus2char[rstatus],
-               rprio, (char*)resources->data);
+               rprio, (char*)p_res->data);
       scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
       if (rst_msg) {
         snprintf(buffer, 4095, "Status message: %s", rst_msg);
@@ -1360,7 +1360,9 @@
         }
       }
 #endif
+      g_free(p_res->data);
     }
+    g_slist_free(resources);
   } else {
     if (name) scr_LogPrint(LPRINT_NORMAL, "Name: %s", name);
     scr_LogPrint(LPRINT_NORMAL, "Type: %s",
@@ -1390,7 +1392,7 @@
 {
   const char *bjid;
   char *buffer;
-  GSList *resources;
+  GSList *resources, *p_res;
 
   if (*arg) {
     scr_LogPrint(LPRINT_NORMAL, "This action does not require a parameter.");
@@ -1408,22 +1410,23 @@
   scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
 
   resources = buddy_getresources(bud);
-  for ( ; resources ; resources = g_slist_next(resources) ) {
+  for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
     enum imstatus rstatus;
     const char *rst_msg;
 
-    rstatus = buddy_getstatus(bud, resources->data);
-    rst_msg = buddy_getstatusmsg(bud, resources->data);
+    rstatus = buddy_getstatus(bud, p_res->data);
+    rst_msg = buddy_getstatusmsg(bud, p_res->data);
 
     snprintf(buffer, 4095, "[%c] %s", imstatus2char[rstatus],
-             (char*)resources->data);
+             (char*)p_res->data);
     scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
     if (rst_msg) {
       snprintf(buffer, 4095, "Status message: %s", rst_msg);
       scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
     }
+    g_free(p_res->data);
   }
-
+  g_slist_free(resources);
   g_free(buffer);
 }