# HG changeset patch # User Daniel Atallah # Date 1186699793 0 # Node ID f773aa054dca10a4e1e7104741f2235078707476 # Parent bc9b78ba996a406fce399df2c3a29b0f463ce574 Clear bonjour buddy values before resetting them so that we notice value removals. diff -r bc9b78ba996a -r f773aa054dca libpurple/protocols/bonjour/buddy.c --- a/libpurple/protocols/bonjour/buddy.c Thu Aug 09 22:37:06 2007 +0000 +++ b/libpurple/protocols/bonjour/buddy.c Thu Aug 09 22:49:53 2007 +0000 @@ -42,6 +42,26 @@ return buddy; } +#define _B_CLR(x) g_free(x); x = NULL; + +void clear_bonjour_buddy_values(BonjourBuddy *buddy) { + + _B_CLR(buddy->first) + _B_CLR(buddy->email); + _B_CLR(buddy->ext); + _B_CLR(buddy->jid); + _B_CLR(buddy->last); + _B_CLR(buddy->msg); + _B_CLR(buddy->nick); + _B_CLR(buddy->node); + _B_CLR(buddy->phsh); + _B_CLR(buddy->status); + _B_CLR(buddy->vc); + _B_CLR(buddy->ver); + _B_CLR(buddy->AIM); + +} + void set_bonjour_buddy_value(BonjourBuddy* buddy, const char *record_key, const char *value, uint32_t len){ gchar **fld = NULL; diff -r bc9b78ba996a -r f773aa054dca libpurple/protocols/bonjour/buddy.h --- a/libpurple/protocols/bonjour/buddy.h Thu Aug 09 22:37:06 2007 +0000 +++ b/libpurple/protocols/bonjour/buddy.h Thu Aug 09 22:49:53 2007 +0000 @@ -75,9 +75,15 @@ BonjourBuddy *bonjour_buddy_new(const gchar *name, PurpleAccount *account); /** + * Clear any existing values from the buddy. + * This is called before updating so that we can notice removals + */ +void clear_bonjour_buddy_values(BonjourBuddy *buddy); + +/** * Sets a value in the BonjourBuddy struct, destroying the old value */ -void set_bonjour_buddy_value(BonjourBuddy* buddy, const char *record_key, const char *value, uint32_t len); +void set_bonjour_buddy_value(BonjourBuddy *buddy, const char *record_key, const char *value, uint32_t len); /** * Check if all the compulsory buddy data is present. diff -r bc9b78ba996a -r f773aa054dca libpurple/protocols/bonjour/mdns_avahi.c --- a/libpurple/protocols/bonjour/mdns_avahi.c Thu Aug 09 22:37:06 2007 +0000 +++ b/libpurple/protocols/bonjour/mdns_avahi.c Thu Aug 09 22:49:53 2007 +0000 @@ -86,6 +86,7 @@ buddy->port_p2pj = port; /* Obtain the parameters from the text_record */ + clear_bonjour_buddy_values(buddy); l = txt; while (l != NULL) { ret = avahi_string_list_get_pair(l, &key, &value, &size); diff -r bc9b78ba996a -r f773aa054dca libpurple/protocols/bonjour/mdns_howl.c --- a/libpurple/protocols/bonjour/mdns_howl.c Thu Aug 09 22:37:06 2007 +0000 +++ b/libpurple/protocols/bonjour/mdns_howl.c Thu Aug 09 22:49:53 2007 +0000 @@ -85,6 +85,7 @@ /* Obtain the parameters from the text_record */ if ((text_record_len > 0) && (text_record) && (*text_record != '\0')) { + clear_bonjour_buddy_values(buddy); sw_text_record_iterator_init(&iterator, text_record, text_record_len); while (sw_text_record_iterator_next(iterator, key, (sw_octet *)value, &value_length) == SW_OKAY) set_bonjour_buddy_value(buddy, key, value, value_length); diff -r bc9b78ba996a -r f773aa054dca libpurple/protocols/bonjour/mdns_win32.c --- a/libpurple/protocols/bonjour/mdns_win32.c Thu Aug 09 22:37:06 2007 +0000 +++ b/libpurple/protocols/bonjour/mdns_win32.c Thu Aug 09 22:49:53 2007 +0000 @@ -64,6 +64,7 @@ uint8_t txt_len; int i; + clear_bonjour_buddy_values(buddy); for (i = 0; buddy_TXT_records[i] != NULL; i++) { txt_entry = TXTRecordGetValuePtr(record_len, record, buddy_TXT_records[i], &txt_len); if (txt_entry != NULL)