summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jansson.c17
-rw-r--r--src/table.c24
2 files changed, 20 insertions, 21 deletions
diff --git a/src/jansson.c b/src/jansson.c
index 2b15240..cc68ae0 100644
--- a/src/jansson.c
+++ b/src/jansson.c
@@ -31,14 +31,11 @@ static int nft_jansson_load_int_node(json_t *root, const char *tag,
if (!json_is_integer(node)) {
errno = ERANGE;
- goto err;
+ return -1;
}
-
*val = json_integer_value(node);
return 0;
-err:
- return -1;
}
const char *nft_jansson_value_parse_str(json_t *root, const char *tag)
@@ -47,9 +44,10 @@ const char *nft_jansson_value_parse_str(json_t *root, const char *tag)
const char *val;
node = json_object_get(root, tag);
- if (node == NULL)
+ if (node == NULL) {
+ errno = EINVAL;
return NULL;
-
+ }
val = json_string_value(node);
return val;
@@ -61,15 +59,12 @@ int nft_jansson_value_parse_val(json_t *root, const char *tag, int type,
json_int_t val;
if (nft_jansson_load_int_node(root, tag, &val) == -1)
- goto err;
+ return -1;
if (nft_get_value(type, &val, out) == -1)
- goto err;
+ return -1;
return 0;
-err:
- errno = ERANGE;
- return -1;
}
bool nft_jansson_node_exist(json_t *root, const char *tag)
diff --git a/src/table.c b/src/table.c
index 65797e8..1d17d3b 100644
--- a/src/table.c
+++ b/src/table.c
@@ -302,26 +302,29 @@ static int nft_table_json_parse(struct nft_table *t, char *json)
json_error_t error;
uint64_t version;
uint32_t table_flag;
- const char *str = NULL;
+ const char *str;
+ int family;
root = json_loadb(json, strlen(json), 0, &error);
if (!root) {
errno = EINVAL;
- return -1;
+ goto err;
}
root = json_object_get(root, "table");
if (root == NULL) {
- errno = ERANGE;
- return -1;
+ errno = EINVAL;
+ goto err;
}
if (nft_jansson_value_parse_val(root, "version",
NFT_TYPE_U64, &version) == -1)
goto err;
- if (version != NFT_TABLE_JSON_VERSION || version == -1)
+ if (version != NFT_TABLE_JSON_VERSION) {
+ errno = EINVAL;
goto err;
+ }
str = nft_jansson_value_parse_str(root, "name");
if (str == NULL)
@@ -330,17 +333,20 @@ static int nft_table_json_parse(struct nft_table *t, char *json)
nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, strdup(str));
root = json_object_get(root, "properties");
- if (root == NULL)
+ if (root == NULL) {
+ errno = EINVAL;
goto err;
+ }
str = nft_jansson_value_parse_str(root, "family");
if (str == NULL)
goto err;
- if (nft_str2family(str) < 0)
+ family = nft_str2family(str);
+ if (family < 0)
goto err;
- nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, nft_str2family(str));
+ nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family);
if (nft_jansson_value_parse_val(root, "table_flags",
NFT_TYPE_U32, &table_flag) == -1)
@@ -352,9 +358,7 @@ static int nft_table_json_parse(struct nft_table *t, char *json)
return 0;
err:
free(root);
- errno = ERANGE;
return -1;
-
#else
errno = EOPNOTSUPP;
return -1;