mirror of https://github.com/getdnsapi/getdns.git
Merge branch 'features/str_without0byte' into develop
This commit is contained in:
commit
972ebf55d0
40
src/dict.c
40
src/dict.c
|
@ -85,12 +85,9 @@ getdns_dict_find_and_add(struct getdns_dict *dict, const char *key)
|
||||||
/*---------------------------------------- getdns_dict_get_names
|
/*---------------------------------------- getdns_dict_get_names
|
||||||
*/
|
*/
|
||||||
getdns_return_t
|
getdns_return_t
|
||||||
getdns_dict_get_names(const struct getdns_dict * dict,
|
getdns_dict_get_names(const getdns_dict *dict, getdns_list **answer)
|
||||||
struct getdns_list ** answer)
|
|
||||||
{
|
{
|
||||||
struct getdns_dict_item *item;
|
struct getdns_dict_item *item;
|
||||||
size_t index;
|
|
||||||
struct getdns_bindata bindata;
|
|
||||||
|
|
||||||
if (!dict || !answer)
|
if (!dict || !answer)
|
||||||
return GETDNS_RETURN_INVALID_PARAMETER;
|
return GETDNS_RETURN_INVALID_PARAMETER;
|
||||||
|
@ -103,11 +100,7 @@ getdns_dict_get_names(const struct getdns_dict * dict,
|
||||||
|
|
||||||
RBTREE_FOR(item, struct getdns_dict_item *,
|
RBTREE_FOR(item, struct getdns_dict_item *,
|
||||||
(getdns_rbtree_t *)&(dict->root)) {
|
(getdns_rbtree_t *)&(dict->root)) {
|
||||||
if (getdns_list_add_item(*answer, &index) != GETDNS_RETURN_GOOD)
|
getdns_list_append_string(*answer, item->node.key);
|
||||||
continue;
|
|
||||||
bindata.size = strlen(item->node.key) + 1;
|
|
||||||
bindata.data = (void *) item->node.key;
|
|
||||||
getdns_list_set_bindata(*answer, index, &bindata);
|
|
||||||
}
|
}
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
} /* getdns_dict_get_names */
|
} /* getdns_dict_get_names */
|
||||||
|
@ -465,6 +458,35 @@ getdns_dict_set_bindata(struct getdns_dict * dict, const char *name,
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
} /* getdns_dict_set_bindata */
|
} /* getdns_dict_set_bindata */
|
||||||
|
|
||||||
|
/*---------------------------------------- getdns_dict_set_bindata */
|
||||||
|
getdns_return_t
|
||||||
|
getdns_dict_util_set_string(getdns_dict *dict, char *name, const char *value)
|
||||||
|
{
|
||||||
|
struct getdns_dict_item *item;
|
||||||
|
getdns_bindata *newbindata;
|
||||||
|
|
||||||
|
if (!dict || !name || !value)
|
||||||
|
return GETDNS_RETURN_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
if (!(newbindata = GETDNS_MALLOC(dict->mf, getdns_bindata)))
|
||||||
|
return GETDNS_RETURN_MEMORY_ERROR;
|
||||||
|
|
||||||
|
newbindata->size = strlen(value);
|
||||||
|
if (!(newbindata->data = (void *)getdns_strdup(&dict->mf, value)))
|
||||||
|
goto error_free_bindata;
|
||||||
|
|
||||||
|
if ((item = getdns_dict_find_and_add(dict, name))) {
|
||||||
|
|
||||||
|
item->dtype = t_bindata;
|
||||||
|
item->data.bindata = newbindata;
|
||||||
|
return GETDNS_RETURN_GOOD;
|
||||||
|
}
|
||||||
|
GETDNS_FREE(dict->mf, newbindata->data);
|
||||||
|
error_free_bindata:
|
||||||
|
GETDNS_FREE(dict->mf, newbindata);
|
||||||
|
return GETDNS_RETURN_MEMORY_ERROR;
|
||||||
|
} /* getdns_dict_util_set_dict */
|
||||||
|
|
||||||
/*---------------------------------------- getdns_dict_set_int */
|
/*---------------------------------------- getdns_dict_set_int */
|
||||||
getdns_return_t
|
getdns_return_t
|
||||||
getdns_dict_set_int(struct getdns_dict * dict, const char *name,
|
getdns_dict_set_int(struct getdns_dict * dict, const char *name,
|
||||||
|
|
43
src/list.c
43
src/list.c
|
@ -456,6 +456,43 @@ getdns_list_set_bindata(struct getdns_list * list, size_t index,
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
} /* getdns_list_set_bindata */
|
} /* getdns_list_set_bindata */
|
||||||
|
|
||||||
|
/*----------------------------------------- getdns_list_set_string */
|
||||||
|
static getdns_return_t
|
||||||
|
getdns_list_set_string(getdns_list *list, size_t index, const char *value)
|
||||||
|
{
|
||||||
|
getdns_bindata *newbindata;
|
||||||
|
getdns_return_t retval;
|
||||||
|
|
||||||
|
if (!list || !value)
|
||||||
|
return GETDNS_RETURN_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
if (index > list->numinuse)
|
||||||
|
return GETDNS_RETURN_NO_SUCH_LIST_ITEM;
|
||||||
|
|
||||||
|
if (!(newbindata = GETDNS_MALLOC(list->mf, getdns_bindata)))
|
||||||
|
return GETDNS_RETURN_MEMORY_ERROR;
|
||||||
|
|
||||||
|
newbindata->size = strlen(value);
|
||||||
|
if (!(newbindata->data = (void *)getdns_strdup(&list->mf, value))) {
|
||||||
|
GETDNS_FREE(list->mf, newbindata);
|
||||||
|
return GETDNS_RETURN_MEMORY_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index == list->numinuse) {
|
||||||
|
retval = getdns_list_add_item(list, &index);
|
||||||
|
if (retval != GETDNS_RETURN_GOOD) {
|
||||||
|
GETDNS_FREE(list->mf, newbindata->data);
|
||||||
|
GETDNS_FREE(list->mf, newbindata);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
getdns_list_destroy_item(list, index);
|
||||||
|
|
||||||
|
list->items[index].dtype = t_bindata;
|
||||||
|
list->items[index].data.bindata = newbindata;
|
||||||
|
return GETDNS_RETURN_GOOD;
|
||||||
|
} /* getdns_list_set_string */
|
||||||
|
|
||||||
/*---------------------------------------- getdns_list_set_int */
|
/*---------------------------------------- getdns_list_set_int */
|
||||||
getdns_return_t
|
getdns_return_t
|
||||||
getdns_list_set_int(struct getdns_list * list, size_t index,
|
getdns_list_set_int(struct getdns_list * list, size_t index,
|
||||||
|
@ -500,6 +537,12 @@ getdns_list_append_bindata(getdns_list *list, const getdns_bindata *child_bindat
|
||||||
return getdns_list_set_bindata(list, list->numinuse, child_bindata);
|
return getdns_list_set_bindata(list, list->numinuse, child_bindata);
|
||||||
}
|
}
|
||||||
getdns_return_t
|
getdns_return_t
|
||||||
|
getdns_list_append_string(getdns_list *list, const char *value)
|
||||||
|
{
|
||||||
|
if (!list) return GETDNS_RETURN_INVALID_PARAMETER;
|
||||||
|
return getdns_list_set_string(list, list->numinuse, value);
|
||||||
|
}
|
||||||
|
getdns_return_t
|
||||||
getdns_list_append_int(getdns_list *list, uint32_t child_int)
|
getdns_list_append_int(getdns_list *list, uint32_t child_int)
|
||||||
{
|
{
|
||||||
if (!list) return GETDNS_RETURN_INVALID_PARAMETER;
|
if (!list) return GETDNS_RETURN_INVALID_PARAMETER;
|
||||||
|
|
|
@ -73,19 +73,6 @@ static getdns_extension_format extformats[] = {
|
||||||
{"specify_class", t_int},
|
{"specify_class", t_int},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct getdns_bindata IPv4_str_bindata = { 5, (void *)"IPv4" };
|
|
||||||
static struct getdns_bindata IPv6_str_bindata = { 5, (void *)"IPv6" };
|
|
||||||
|
|
||||||
getdns_return_t
|
|
||||||
getdns_dict_util_set_string(struct getdns_dict * dict, char *name, const char *value)
|
|
||||||
{
|
|
||||||
/* account for the null term */
|
|
||||||
if (value == NULL) {
|
|
||||||
return GETDNS_RETURN_WRONG_TYPE_REQUESTED;
|
|
||||||
}
|
|
||||||
struct getdns_bindata type_bin = { strlen(value) + 1, (uint8_t *) value };
|
|
||||||
return getdns_dict_set_bindata(dict, name, &type_bin);
|
|
||||||
}
|
|
||||||
|
|
||||||
getdns_return_t
|
getdns_return_t
|
||||||
getdns_dict_util_get_string(struct getdns_dict * dict, char *name, char **result)
|
getdns_dict_util_get_string(struct getdns_dict * dict, char *name, char **result)
|
||||||
|
@ -606,9 +593,8 @@ priv_getdns_create_reply_dict(getdns_context *context, getdns_network_req *req,
|
||||||
bindata.data = rdf_iter->pos;
|
bindata.data = rdf_iter->pos;
|
||||||
if (!set_dict(&rr_dict, getdns_dict_create_with_context(context)) ||
|
if (!set_dict(&rr_dict, getdns_dict_create_with_context(context)) ||
|
||||||
|
|
||||||
getdns_dict_set_bindata(rr_dict, "address_type",
|
getdns_dict_util_set_string(rr_dict, "address_type",
|
||||||
rr_type == GETDNS_RRTYPE_A ?
|
rr_type == GETDNS_RRTYPE_A ? "IPv4" : "IPv6" ) ||
|
||||||
&IPv4_str_bindata : &IPv6_str_bindata) ||
|
|
||||||
|
|
||||||
getdns_dict_set_bindata(rr_dict,"address_data",&bindata) ||
|
getdns_dict_set_bindata(rr_dict,"address_data",&bindata) ||
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,9 @@ getdns_return_t getdns_list_append_list(getdns_list *list,
|
||||||
const getdns_list *child_list);
|
const getdns_list *child_list);
|
||||||
getdns_return_t getdns_list_append_bindata(getdns_list *list,
|
getdns_return_t getdns_list_append_bindata(getdns_list *list,
|
||||||
const getdns_bindata *child_bindata);
|
const getdns_bindata *child_bindata);
|
||||||
|
getdns_return_t getdns_list_append_string(getdns_list *list,
|
||||||
|
const char *value);
|
||||||
|
|
||||||
getdns_return_t getdns_list_append_int(getdns_list *list,
|
getdns_return_t getdns_list_append_int(getdns_list *list,
|
||||||
uint32_t child_uint32);
|
uint32_t child_uint32);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue