comparison 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
comparison
equal deleted inserted replaced
1071:866be086cc9b 1072:2a3cfb98bd5e
1280 esub = buddy_getsubscription(bud); 1280 esub = buddy_getsubscription(bud);
1281 1281
1282 buffer = g_new(char, 4096); 1282 buffer = g_new(char, 4096);
1283 1283
1284 if (bjid) { 1284 if (bjid) {
1285 GSList *resources; 1285 GSList *resources, *p_res;
1286 char *bstr = "unknown"; 1286 char *bstr = "unknown";
1287 1287
1288 // Enter chat mode 1288 // Enter chat mode
1289 scr_set_chatmode(TRUE); 1289 scr_set_chatmode(TRUE);
1290 scr_ShowBuddyWindow(); 1290 scr_ShowBuddyWindow();
1318 if (rst_msg) { 1318 if (rst_msg) {
1319 snprintf(buffer, 4095, "Last status message: %s", rst_msg); 1319 snprintf(buffer, 4095, "Last status message: %s", rst_msg);
1320 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO); 1320 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
1321 } 1321 }
1322 } 1322 }
1323 for ( ; resources ; resources = g_slist_next(resources) ) { 1323 for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
1324 gchar rprio; 1324 gchar rprio;
1325 enum imstatus rstatus; 1325 enum imstatus rstatus;
1326 const char *rst_msg; 1326 const char *rst_msg;
1327 time_t rst_time; 1327 time_t rst_time;
1328 struct pgp_data *rpgp; 1328 struct pgp_data *rpgp;
1329 1329
1330 rprio = buddy_getresourceprio(bud, resources->data); 1330 rprio = buddy_getresourceprio(bud, p_res->data);
1331 rstatus = buddy_getstatus(bud, resources->data); 1331 rstatus = buddy_getstatus(bud, p_res->data);
1332 rst_msg = buddy_getstatusmsg(bud, resources->data); 1332 rst_msg = buddy_getstatusmsg(bud, p_res->data);
1333 rst_time = buddy_getstatustime(bud, resources->data); 1333 rst_time = buddy_getstatustime(bud, p_res->data);
1334 rpgp = buddy_resource_pgp(bud, resources->data); 1334 rpgp = buddy_resource_pgp(bud, p_res->data);
1335 1335
1336 snprintf(buffer, 4095, "Resource: [%c] (%d) %s", imstatus2char[rstatus], 1336 snprintf(buffer, 4095, "Resource: [%c] (%d) %s", imstatus2char[rstatus],
1337 rprio, (char*)resources->data); 1337 rprio, (char*)p_res->data);
1338 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO); 1338 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
1339 if (rst_msg) { 1339 if (rst_msg) {
1340 snprintf(buffer, 4095, "Status message: %s", rst_msg); 1340 snprintf(buffer, 4095, "Status message: %s", rst_msg);
1341 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE); 1341 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
1342 } 1342 }
1358 (ss & GPGME_SIGSUM_RED ? "bad" : "unknown"))); 1358 (ss & GPGME_SIGSUM_RED ? "bad" : "unknown")));
1359 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE); 1359 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
1360 } 1360 }
1361 } 1361 }
1362 #endif 1362 #endif
1363 } 1363 g_free(p_res->data);
1364 }
1365 g_slist_free(resources);
1364 } else { 1366 } else {
1365 if (name) scr_LogPrint(LPRINT_NORMAL, "Name: %s", name); 1367 if (name) scr_LogPrint(LPRINT_NORMAL, "Name: %s", name);
1366 scr_LogPrint(LPRINT_NORMAL, "Type: %s", 1368 scr_LogPrint(LPRINT_NORMAL, "Type: %s",
1367 type == ROSTER_TYPE_GROUP ? "group" : 1369 type == ROSTER_TYPE_GROUP ? "group" :
1368 (type == ROSTER_TYPE_SPECIAL ? "special" : "unknown")); 1370 (type == ROSTER_TYPE_SPECIAL ? "special" : "unknown"));
1388 // room_names() is a variation of do_info(), for chatrooms only 1390 // room_names() is a variation of do_info(), for chatrooms only
1389 static void room_names(gpointer bud, char *arg) 1391 static void room_names(gpointer bud, char *arg)
1390 { 1392 {
1391 const char *bjid; 1393 const char *bjid;
1392 char *buffer; 1394 char *buffer;
1393 GSList *resources; 1395 GSList *resources, *p_res;
1394 1396
1395 if (*arg) { 1397 if (*arg) {
1396 scr_LogPrint(LPRINT_NORMAL, "This action does not require a parameter."); 1398 scr_LogPrint(LPRINT_NORMAL, "This action does not require a parameter.");
1397 return; 1399 return;
1398 } 1400 }
1406 buffer = g_new(char, 4096); 1408 buffer = g_new(char, 4096);
1407 strncpy(buffer, "Room members:", 127); 1409 strncpy(buffer, "Room members:", 127);
1408 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO); 1410 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
1409 1411
1410 resources = buddy_getresources(bud); 1412 resources = buddy_getresources(bud);
1411 for ( ; resources ; resources = g_slist_next(resources) ) { 1413 for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
1412 enum imstatus rstatus; 1414 enum imstatus rstatus;
1413 const char *rst_msg; 1415 const char *rst_msg;
1414 1416
1415 rstatus = buddy_getstatus(bud, resources->data); 1417 rstatus = buddy_getstatus(bud, p_res->data);
1416 rst_msg = buddy_getstatusmsg(bud, resources->data); 1418 rst_msg = buddy_getstatusmsg(bud, p_res->data);
1417 1419
1418 snprintf(buffer, 4095, "[%c] %s", imstatus2char[rstatus], 1420 snprintf(buffer, 4095, "[%c] %s", imstatus2char[rstatus],
1419 (char*)resources->data); 1421 (char*)p_res->data);
1420 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO); 1422 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
1421 if (rst_msg) { 1423 if (rst_msg) {
1422 snprintf(buffer, 4095, "Status message: %s", rst_msg); 1424 snprintf(buffer, 4095, "Status message: %s", rst_msg);
1423 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE); 1425 scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
1424 } 1426 }
1425 } 1427 g_free(p_res->data);
1426 1428 }
1429 g_slist_free(resources);
1427 g_free(buffer); 1430 g_free(buffer);
1428 } 1431 }
1429 1432
1430 static void move_group_member(gpointer bud, void *groupnamedata) 1433 static void move_group_member(gpointer bud, void *groupnamedata)
1431 { 1434 {