static GHashTable * _copy_hash(GHashTable *src) { GHashTable *res = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, metautils_gba_unref); if (src) { GHashTableIter iter; gpointer k, v; g_hash_table_iter_init(&iter, src); while (g_hash_table_iter_next(&iter, &k, &v)) g_hash_table_insert(res, g_strdup((gchar*)k), metautils_gba_dup(v)); } return res; }
static void ht_iterator(gpointer k, gpointer v, gpointer u) { struct kv_convert_ctx_s *ctx; key_value_pair_t *pair; ctx = u; if (!ctx || ctx->error_met) return; if (!(pair = g_try_malloc0(sizeof(key_value_pair_t)))) { GSETERROR(ctx->err, "Memory allocation failure"); ctx->error_met = TRUE; return; } if (ctx->copy) { pair->key = g_strdup(k); pair->value = metautils_gba_dup(v); } else { pair->key = k; pair->value = (GByteArray *) v; } ctx->pairs = g_slist_append(ctx->pairs, pair); }