diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-07-25 21:36:55 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-07-25 21:44:09 +0200 |
commit | a3009e817678e71b85c3d5b82397d1933bfc2830 (patch) | |
tree | f18d1c5fe9d8642cbac64cd9a8df835574cc961a | |
parent | 3f994836f6bb124a5c0185ab6659ef7f57ceac5f (diff) |
expr: payload: use nft_mxml_num_parse
Replace existing code to use this function.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | src/expr/payload.c | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/src/expr/payload.c b/src/expr/payload.c index 5bf47e1..34aee90 100644 --- a/src/expr/payload.c +++ b/src/expr/payload.c @@ -183,11 +183,8 @@ nft_rule_expr_payload_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree) { #ifdef XML_PARSING struct nft_expr_payload *payload = nft_expr_data(e); - mxml_node_t *node = NULL; const char *base_str; - uint64_t tmp; int32_t reg; - char *endptr; reg = nft_mxml_reg_parse(tree, "dreg", MXML_DESCEND_FIRST); if (reg < 0) @@ -211,28 +208,17 @@ nft_rule_expr_payload_xml_parse(struct nft_rule_expr *e, mxml_node_t *tree) e->flags |= (1 << NFT_EXPR_PAYLOAD_BASE); - /* Get and set <offset>. Not mandatory */ - node = mxmlFindElement(tree, tree, "offset", NULL, NULL, - MXML_DESCEND); - if (node != NULL) { - tmp = strtoull(node->child->value.opaque, &endptr, 10); - if (tmp > UINT_MAX || tmp < 0 || *endptr) - return -1; + if (nft_mxml_num_parse(tree, "offset", MXML_DESCEND_FIRST, BASE_DEC, + &payload->offset, NFT_TYPE_U8) != 0) + return -1; - payload->offset = (unsigned int)tmp; - e->flags |= (1 << NFT_EXPR_PAYLOAD_OFFSET); - } + e->flags |= (1 << NFT_EXPR_PAYLOAD_OFFSET); - /* Get and set <len>. Not mandatory */ - node = mxmlFindElement(tree, tree, "len", NULL, NULL, MXML_DESCEND); - if (node != NULL) { - tmp = strtoull(node->child->value.opaque, &endptr, 10); - if (tmp > UINT_MAX || tmp < 0 || *endptr) - return -1; + if (nft_mxml_num_parse(tree, "len", MXML_DESCEND_FIRST, BASE_DEC, + &payload->len, NFT_TYPE_U8) != 0) + return -1; - payload->len = (unsigned int)tmp; - e->flags |= (1 << NFT_EXPR_PAYLOAD_LEN); - } + e->flags |= (1 << NFT_EXPR_PAYLOAD_LEN); return 0; err: errno = EINVAL; |