diff options
Diffstat (limited to 'protocols/jabber/xmltree.c')
-rw-r--r-- | protocols/jabber/xmltree.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/protocols/jabber/xmltree.c b/protocols/jabber/xmltree.c index d4063476..af0c5832 100644 --- a/protocols/jabber/xmltree.c +++ b/protocols/jabber/xmltree.c @@ -527,9 +527,25 @@ void xt_add_attr( struct xt_node *node, char *key, char *value ) { int i; - for( i = 0; node->attr[i].key; i ++ ); - node->attr = g_renew( struct xt_attr, node->attr, i + 2 ); - node->attr[i].key = g_strdup( key ); + /* Now actually it'd be nice if we can also change existing attributes + (which actually means this function doesn't have the right name). + So let's find out if we have this attribute already... */ + for( i = 0; node->attr[i].key; i ++ ) + if( strcmp( node->attr[i].key, key ) == 0 ) + break; + + if( node->attr[i].key == NULL ) + { + /* If not, allocate space for a new attribute. */ + node->attr = g_renew( struct xt_attr, node->attr, i + 2 ); + node->attr[i].key = g_strdup( key ); + node->attr[i+1].key = NULL; + } + else + { + /* Otherwise, free the old value before setting the new one. */ + g_free( node->attr[i].value ); + } + node->attr[i].value = g_strdup( value ); - node->attr[i+1].key = NULL; } |