diff options
Diffstat (limited to 'src/xmpp/roster.c')
-rw-r--r-- | src/xmpp/roster.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/xmpp/roster.c b/src/xmpp/roster.c index 95d4223e..2420c307 100644 --- a/src/xmpp/roster.c +++ b/src/xmpp/roster.c @@ -73,6 +73,7 @@ typedef struct _group_data { // id handlers static int _group_add_id_handler(xmpp_stanza_t *const stanza, void *const userdata); static int _group_remove_id_handler(xmpp_stanza_t *const stanza, void *const userdata); +static void _free_group_data(GroupData *data); // helper functions GSList* _get_groups_from_item(xmpp_stanza_t *item); @@ -139,7 +140,7 @@ roster_send_add_to_group(const char *const group, PContact contact) } xmpp_ctx_t * const ctx = connection_get_ctx(); - iq_id_handler_add(unique_id, _group_add_id_handler, data); + iq_id_handler_add(unique_id, _group_add_id_handler, (ProfIdFreeCallback)_free_group_data, data); xmpp_stanza_t *iq = stanza_create_roster_set(ctx, unique_id, p_contact_barejid(contact), p_contact_name(contact), new_groups); iq_send_stanza(iq); @@ -153,9 +154,7 @@ _group_add_id_handler(xmpp_stanza_t *const stanza, void *const userdata) if (userdata) { GroupData *data = userdata; ui_group_added(data->name, data->group); - free(data->name); - free(data->group); - free(userdata); + _free_group_data(data); } return 0; } @@ -184,7 +183,7 @@ roster_send_remove_from_group(const char *const group, PContact contact) data->name = strdup(p_contact_barejid(contact)); } - iq_id_handler_add(unique_id, _group_remove_id_handler, data); + iq_id_handler_add(unique_id, _group_remove_id_handler, (ProfIdFreeCallback)_free_group_data, data); xmpp_stanza_t *iq = stanza_create_roster_set(ctx, unique_id, p_contact_barejid(contact), p_contact_name(contact), new_groups); iq_send_stanza(iq); @@ -336,3 +335,13 @@ _get_groups_from_item(xmpp_stanza_t *item) return groups; } + +static void +_free_group_data(GroupData *data) +{ + if (data) { + free(data->group); + free(data->name); + free(data); + } +} |