Mercurial > ~mikael > mcabber > hg
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 { |