summaryrefslogtreecommitdiff
path: root/libpurple/util.c
diff options
context:
space:
mode:
authorqarkai <qarkai@gmail.com>2019-12-01 15:36:50 +0300
committerqarkai <qarkai@gmail.com>2019-12-01 15:36:50 +0300
commitf09ded7933aa8620772586422176bb5189fa90ab (patch)
treeed5ee237226a7c99a9fa333fcd6c714842272044 /libpurple/util.c
parent02cd43e100760f4de42079bf0874ef76d239259e (diff)
downloadpidgin-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.c23
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 *