diff --git a/src/dict.c b/src/dict.c index da029790..1d81e34e 100644 --- a/src/dict.c +++ b/src/dict.c @@ -234,48 +234,43 @@ getdns_dict_create() getdns_return_t getdns_dict_copy(struct getdns_dict * srcdict, struct getdns_dict ** dstdict) { - getdns_return_t retval = GETDNS_RETURN_NO_SUCH_DICT_NAME; struct getdns_dict_item *item; char *key; - if (srcdict != NULL && dstdict != NULL) { - *dstdict = getdns_dict_create(); - - LDNS_RBTREE_FOR(item, struct getdns_dict_item *, - &(srcdict->root)) - { - key = (char *) item->node.key; - switch (item->dtype) { - case t_bindata: - getdns_dict_set_bindata(*dstdict, key, - item->data.bindata); - break; - - case t_dict: - getdns_dict_set_dict(*dstdict, key, - item->data.dict); - break; - - case t_int: - getdns_dict_set_int(*dstdict, key, - item->data.n); - break; - - case t_list: - getdns_dict_set_list(*dstdict, key, - item->data.list); - break; - - case t_invalid: - default: - // TODO: this is a fault of some kind, for now ignore it - break; - } - } - retval = GETDNS_RETURN_GOOD; + if (dstdict == NULL) + return GETDNS_RETURN_NO_SUCH_DICT_NAME; + if (srcdict == NULL) { + *dstdict = NULL; + return GETDNS_RETURN_GOOD; } + *dstdict = getdns_dict_create(); + LDNS_RBTREE_FOR(item, struct getdns_dict_item *, &(srcdict->root)) { + key = (char *) item->node.key; + switch (item->dtype) { + case t_bindata: + getdns_dict_set_bindata(*dstdict, key, + item->data.bindata); + break; - return retval; + case t_dict: + getdns_dict_set_dict(*dstdict, key, item->data.dict); + break; + + case t_int: + getdns_dict_set_int(*dstdict, key, item->data.n); + break; + + case t_list: + getdns_dict_set_list(*dstdict, key, item->data.list); + break; + + case t_invalid: + default: + // TODO: this is a fault of some kind, for now ignore it + break; + } + } + return GETDNS_RETURN_GOOD; } /* getdns_dict_copy */ /*---------------------------------------- getdns_dict_item_free */ diff --git a/src/test/tests_stub_async.c b/src/test/tests_stub_async.c index 8a9c724f..eed8ef79 100644 --- a/src/test/tests_stub_async.c +++ b/src/test/tests_stub_async.c @@ -44,6 +44,7 @@ this_callbackfn(struct getdns_context_t *this_context, char *res = getdns_pretty_print_dict(this_response); fprintf(stdout, "%s", res); getdns_dict_destroy(this_response); + free(res); } else if (this_callback_type == GETDNS_CALLBACK_CANCEL) fprintf(stderr,