From 428b515e2699d1061a1497db4ae8338d895aeb8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Neira=20Ayuso?= Date: Fri, 9 Aug 2013 13:14:46 +0200 Subject: jansson: Add nft_jansson_family function Refactor some existing code with the new function nft_jansson_family. Signed-off-by: Alvaro Neira Ayuso Ayuso Signed-off-by: Pablo Neira Ayuso --- src/chain.c | 10 ++-------- src/internal.h | 1 + src/jansson.c | 18 ++++++++++++++++++ src/table.c | 9 ++------- 4 files changed, 23 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/chain.c b/src/chain.c index e2e6f90..a6d99ca 100644 --- a/src/chain.c +++ b/src/chain.c @@ -517,14 +517,8 @@ static int nft_chain_json_parse(struct nft_chain *c, char *json) nft_chain_attr_set_u64(c, NFT_CHAIN_ATTR_PACKETS, uval64); - valstr = nft_jansson_value_parse_str(root, "family"); - - if (valstr == NULL) - goto err; - - val32 = nft_str2family(valstr); - if (val32 == -1) - goto err; + if (nft_jansson_parse_family(root, &val32) != 0) + return -1; nft_chain_attr_set_u32(c, NFT_CHAIN_ATTR_FAMILY, val32); diff --git a/src/internal.h b/src/internal.h index 17d1286..62eb3c5 100644 --- a/src/internal.h +++ b/src/internal.h @@ -49,6 +49,7 @@ int nft_jansson_value_parse_val(json_t *root, const char *tag, const char *nft_jansson_value_parse_str(json_t *root, const char *tag); bool nft_jansson_node_exist(json_t *root, const char *tag); json_t *nft_jansson_get_root(char *json, const char *tag, json_error_t *err); +int nft_jansson_parse_family(json_t *root, void *out); #endif const char *nft_family2str(uint32_t family); diff --git a/src/jansson.c b/src/jansson.c index 4c778d9..cc3ab23 100644 --- a/src/jansson.c +++ b/src/jansson.c @@ -90,4 +90,22 @@ json_t *nft_jansson_get_root(char *json, const char *tag, json_error_t *err) return root; } +int nft_jansson_parse_family(json_t *root, void *out) +{ + const char *str; + int family; + + str = nft_jansson_value_parse_str(root, "family"); + if (str == NULL) + return -1; + + family = nft_str2family(str); + if (family < 0) { + errno = EINVAL; + return -1; + } + + memcpy(out, &family, sizeof(family)); + return 0; +} #endif diff --git a/src/table.c b/src/table.c index 18d9077..1fa0dac 100644 --- a/src/table.c +++ b/src/table.c @@ -285,13 +285,8 @@ static int nft_table_json_parse(struct nft_table *t, char *json) nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, strdup(str)); - str = nft_jansson_value_parse_str(root, "family"); - if (str == NULL) - goto err; - - family = nft_str2family(str); - if (family < 0) - goto err; + if (nft_jansson_parse_family(root, &family) != 0) + return -1; nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family); -- cgit v1.2.3