summaryrefslogtreecommitdiffstats
path: root/src/set_elem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/set_elem.c')
-rw-r--r--src/set_elem.c49
1 files changed, 28 insertions, 21 deletions
diff --git a/src/set_elem.c b/src/set_elem.c
index d99b65e..73c100f 100644
--- a/src/set_elem.c
+++ b/src/set_elem.c
@@ -375,34 +375,21 @@ int nft_set_elems_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_set *s)
}
EXPORT_SYMBOL(nft_set_elems_nlmsg_parse);
-static int nft_set_elem_xml_parse(struct nft_set_elem *e, char *xml)
-{
#ifdef XML_PARSING
- mxml_node_t *tree;
+int nft_mxml_set_elem_parse(mxml_node_t *tree, struct nft_set_elem *e)
+{
mxml_node_t *node;
int set_elem_data;
- tree = mxmlLoadString(NULL, xml, MXML_OPAQUE_CALLBACK);
- if (tree == NULL) {
- errno = EINVAL;
- return -1;
- }
-
- if (strcmp(tree->value.opaque, "set_elem") != 0) {
- errno = EINVAL;
- goto err;
- }
-
if (nft_mxml_num_parse(tree, "flags", MXML_DESCEND_FIRST,
BASE_DEC, &e->set_elem_flags,
NFT_TYPE_U32) != 0)
- goto err;
+ return -1;
e->flags |= (1 << NFT_SET_ELEM_ATTR_FLAGS);
- if (nft_mxml_data_reg_parse(tree, "key",
- &e->key) != DATA_VALUE)
- goto err;
+ if (nft_mxml_data_reg_parse(tree, "key", &e->key) != DATA_VALUE)
+ return -1;
e->flags |= (1 << NFT_SET_ELEM_ATTR_KEY);
@@ -423,13 +410,33 @@ static int nft_set_elem_xml_parse(struct nft_set_elem *e, char *xml)
e->flags |= (1 << NFT_SET_ELEM_ATTR_CHAIN);
break;
default:
- goto err;
+ return -1;
}
}
-
- mxmlDelete(tree);
return 0;
+}
+#endif
+static int nft_set_elem_xml_parse(struct nft_set_elem *e, char *xml)
+{
+#ifdef XML_PARSING
+ mxml_node_t *tree;
+ int ret;
+
+ tree = mxmlLoadString(NULL, xml, MXML_OPAQUE_CALLBACK);
+ if (tree == NULL) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (strcmp(tree->value.opaque, "set_elem") != 0) {
+ errno = EINVAL;
+ goto err;
+ }
+
+ ret = nft_mxml_set_elem_parse(tree, e);
+ mxmlDelete(tree);
+ return ret;
err:
mxmlDelete(tree);
return -1;