From 1e27448037b1bbb6924d966a5fd79e5db19ba41d Mon Sep 17 00:00:00 2001 From: Ana Rey Date: Thu, 26 Jun 2014 19:08:40 +0200 Subject: table: Do not print unset values in xml file It changes the parse and snprintf functions to omit unset values. Signed-off-by: Ana Rey Signed-off-by: Pablo Neira Ayuso --- src/table.c | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/table.c b/src/table.c index 5a0135f..7874245 100644 --- a/src/table.c +++ b/src/table.c @@ -266,20 +266,17 @@ int nft_mxml_table_parse(mxml_node_t *tree, struct nft_table *t, name = nft_mxml_str_parse(tree, "name", MXML_DESCEND_FIRST, NFT_XML_MAND, err); - if (name == NULL) - return -1; - nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, name); + if (name != NULL) + nft_table_attr_set_str(t, NFT_TABLE_ATTR_NAME, name); family = nft_mxml_family_parse(tree, "family", MXML_DESCEND_FIRST, NFT_XML_MAND, err); - if (family < 0) - return -1; - nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family); + if (family >= 0) + nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FAMILY, family); if (nft_mxml_num_parse(tree, "flags", MXML_DESCEND, BASE_DEC, - &flags, NFT_TYPE_U32, NFT_XML_MAND, err) != 0) - return -1; - nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags); + &flags, NFT_TYPE_U32, NFT_XML_MAND, err) == 0) + nft_table_attr_set_u32(t, NFT_TABLE_ATTR_FLAGS, flags); if (nft_mxml_num_parse(tree, "use", MXML_DESCEND, BASE_DEC, &use, NFT_TYPE_U32, NFT_XML_MAND, err) == 0) @@ -424,10 +421,34 @@ static int nft_table_snprintf_json(char *buf, size_t size, struct nft_table *t) static int nft_table_snprintf_xml(char *buf, size_t size, struct nft_table *t) { - return snprintf(buf, size, "%s%s" - "%d%d
", - t->name, nft_family2str(t->family), - t->table_flags, t->use); + int ret, len = size, offset = 0; + + ret = snprintf(buf, size, ""); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + + if (t->flags & (1 << NFT_TABLE_ATTR_NAME)) { + ret = snprintf(buf + offset, size, "%s", t->name); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + if (t->flags & (1 << NFT_TABLE_ATTR_FAMILY)) { + ret = snprintf(buf + offset, size, "%s", + nft_family2str(t->family)); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + if (t->flags & (1 << NFT_TABLE_ATTR_FLAGS)) { + ret = snprintf(buf + offset, size, "%u", + t->table_flags); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + if (t->flags & (1 << NFT_TABLE_ATTR_USE)) { + ret = snprintf(buf + offset, size, "%u", t->use); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + + ret = snprintf(buf + offset, size, "
"); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + + return offset; } static int nft_table_snprintf_default(char *buf, size_t size, struct nft_table *t) -- cgit v1.2.3