summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAna Rey <anarey@gmail.com>2014-06-21 18:30:00 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2014-06-23 19:35:05 +0200
commita923b709090823ad12904b9cbe0af34ea6ec8f67 (patch)
tree89fb03b6dd429132f5e6b82111caf52b13d3750e /src
parent85b2e32c74eb2d5f68f4a63bcee88ab860b02322 (diff)
expr: meta: Do not print unset values in json file
It changes the parse and snprintf functions to omit unset values. Moreover, It adds some whitespaces arount '+' caracter, as the CodingStyle recommends. Signed-off-by: Ana Rey <anarey@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/expr/meta.c43
1 files changed, 17 insertions, 26 deletions
diff --git a/src/expr/meta.c b/src/expr/meta.c
index f9c9498..f19b55a 100644
--- a/src/expr/meta.c
+++ b/src/expr/meta.c
@@ -187,29 +187,22 @@ static int nft_rule_expr_meta_json_parse(struct nft_rule_expr *e, json_t *root,
int key;
key_str = nft_jansson_parse_str(root, "key", err);
- if (key_str == NULL)
- return -1;
-
- key = str2meta_key(key_str);
- if (key < 0)
- return -1;
-
- nft_rule_expr_set_u32(e, NFT_EXPR_META_KEY, key);
+ if (key_str != NULL) {
+ key = str2meta_key(key_str);
+ if (key >= 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_META_KEY, key);
+ }
if (nft_jansson_node_exist(root, "dreg")) {
if (nft_jansson_parse_reg(root, "dreg", NFT_TYPE_U32, &reg,
- err) < 0)
- return -1;
-
- nft_rule_expr_set_u32(e, NFT_EXPR_META_DREG, reg);
+ err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_META_DREG, reg);
}
if (nft_jansson_node_exist(root, "sreg")) {
if (nft_jansson_parse_reg(root, "sreg", NFT_TYPE_U32, &reg,
- err) < 0)
- return -1;
-
- nft_rule_expr_set_u32(e, NFT_EXPR_META_SREG, reg);
+ err) == 0)
+ nft_rule_expr_set_u32(e, NFT_EXPR_META_SREG, reg);
}
return 0;
@@ -301,27 +294,25 @@ nft_rule_expr_meta_snprintf_json(char *buf, size_t size,
struct nft_expr_meta *meta = nft_expr_data(e);
if (e->flags & (1 << NFT_EXPR_META_DREG)) {
- ret = snprintf(buf+offset, len, "\"dreg\":%u,",
+ ret = snprintf(buf + offset, len, "\"dreg\":%u,",
meta->dreg);
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
}
-
if (e->flags & (1 << NFT_EXPR_META_KEY)) {
- ret = snprintf(buf+offset, len, "\"key\":\"%s\",",
- meta_key2str(meta->key));
+ ret = snprintf(buf + offset, len, "\"key\":\"%s\",",
+ meta_key2str(meta->key));
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
}
-
if (e->flags & (1 << NFT_EXPR_META_SREG)) {
- ret = snprintf(buf+offset, len, "\"sreg\":%u,",
+ ret = snprintf(buf + offset, len, "\"sreg\":%u,",
meta->sreg);
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
}
+ /* Remove the last comma separator */
+ if (offset > 0)
+ offset--;
- /* Remove the last separator characther */
- buf[offset-1] = '\0';
-
- return offset-1;
+ return offset;
}
static int