summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorÁlvaro Neira Ayuso <alvaroneay@gmail.com>2013-08-09 13:14:46 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2013-08-09 13:32:54 +0200
commit428b515e2699d1061a1497db4ae8338d895aeb8f (patch)
tree11d3e29e3da589c04de438c43bf4f01b004a0f19
parent343e8c3c95d3343dc6241f194c1cf47d62a2854f (diff)
jansson: Add nft_jansson_family function
Refactor some existing code with the new function nft_jansson_family. Signed-off-by: Alvaro Neira Ayuso Ayuso <alvaroneay@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/chain.c10
-rw-r--r--src/internal.h1
-rw-r--r--src/jansson.c18
-rw-r--r--src/table.c9
4 files changed, 23 insertions, 15 deletions
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);