diff options
author | qarkai <qarkai@gmail.com> | 2019-12-01 15:36:50 +0300 |
---|---|---|
committer | qarkai <qarkai@gmail.com> | 2019-12-01 15:36:50 +0300 |
commit | f09ded7933aa8620772586422176bb5189fa90ab (patch) | |
tree | ed5ee237226a7c99a9fa333fcd6c714842272044 /libpurple/util.c | |
parent | 02cd43e100760f4de42079bf0874ef76d239259e (diff) | |
download | pidgin-f09ded7933aa8620772586422176bb5189fa90ab.tar.gz |
Add purple_key_value_pair_new_full with free function for value in PurpleKeyValuePair
Diffstat (limited to 'libpurple/util.c')
-rw-r--r-- | libpurple/util.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/libpurple/util.c b/libpurple/util.c index 7c7ad76579..fbe528e65e 100644 --- a/libpurple/util.c +++ b/libpurple/util.c @@ -3790,26 +3790,33 @@ purple_key_value_pair_new(const char *key, gpointer value) kvp = g_new0(PurpleKeyValuePair, 1); kvp->key = g_strdup(key); kvp->value = value; + kvp->value_destroy_func = NULL; return kvp; } -void -purple_key_value_pair_free(PurpleKeyValuePair *kvp) +PurpleKeyValuePair * +purple_key_value_pair_new_full(const char *key, gpointer value, GDestroyNotify value_destroy_func) { - g_return_if_fail(kvp != NULL); + PurpleKeyValuePair *kvp = purple_key_value_pair_new(key, value); - g_free(kvp->key); - g_free(kvp); + kvp->value_destroy_func = value_destroy_func; + + return kvp; } void -purple_key_value_pair_free_full(PurpleKeyValuePair *kvp) +purple_key_value_pair_free(PurpleKeyValuePair *kvp) { g_return_if_fail(kvp != NULL); - g_free(kvp->value); - purple_key_value_pair_free(kvp); + g_free(kvp->key); + + if (kvp->value_destroy_func) { + kvp->value_destroy_func(kvp->value); + } + + g_free(kvp); } gchar * |