diff mbox

[libnftnl,4/4] expr: ct: Do not print unset values in json

Message ID 1403592401-5057-5-git-send-email-anarey@gmail.com
State Accepted
Headers show

Commit Message

Ana Rey June 24, 2014, 6:46 a.m. UTC
It changes the parse functions to omit unset values.

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/expr/ct.c | 44 ++++++++++++++++++--------------------------
 1 file changed, 18 insertions(+), 26 deletions(-)
diff mbox

Patch

diff --git a/src/expr/ct.c b/src/expr/ct.c
index f2718f9..28ac13b 100644
--- a/src/expr/ct.c
+++ b/src/expr/ct.c
@@ -231,44 +231,36 @@  static int nft_rule_expr_ct_json_parse(struct nft_rule_expr *e, json_t *root,
 	int 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_CT_DREG, reg);
+		if (nft_jansson_parse_reg(root, "dreg", NFT_TYPE_U32, &reg,
+					  err) == 0)
+			nft_rule_expr_set_u32(e, NFT_EXPR_CT_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_CT_SREG, reg);
+		if (nft_jansson_parse_reg(root, "sreg", NFT_TYPE_U32, &reg,
+					  err) == 0)
+			nft_rule_expr_set_u32(e, NFT_EXPR_CT_SREG, reg);
 	}
 
 	if (nft_jansson_node_exist(root, "key")) {
 		key_str = nft_jansson_parse_str(root, "key", err);
-		if (key_str == NULL)
-			return -1;
-
-		key = str2ctkey(key_str);
-		if (key < 0)
-			goto err;
-
-		nft_rule_expr_set_u32(e, NFT_EXPR_CT_KEY, key);
-
+		if (key_str != NULL) {
+			key = str2ctkey(key_str);
+			if (key >= 0)
+				nft_rule_expr_set_u32(e, NFT_EXPR_CT_KEY, key);
+		}
 	}
 
 	if (nft_jansson_node_exist(root, "dir")) {
 		dir_str = nft_jansson_parse_str(root, "dir", err);
-		if (dir_str == NULL)
-			return -1;
-
-		if (str2ctdir(dir_str, &dir) != 0) {
-			err->node_name = "dir";
-			err->error = NFT_PARSE_EBADTYPE;
-			goto err;
-		}
-
+		if (dir_str != NULL) {
+			if (str2ctdir(dir_str, &dir) != 0) {
+				err->node_name = "dir";
+				err->error = NFT_PARSE_EBADTYPE;
+				goto err;
+			}
 		nft_rule_expr_set_u8(e, NFT_EXPR_CT_DIR, dir);
+		}
 	}
 
 	return 0;