summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2013-06-19 17:53:25 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2013-06-19 17:54:31 +0200
commit7169863df1780f53ea71659eed2c6d5bb2daa015 (patch)
tree0310d77c9fd2d3d35a64fd059c7400ba0589e4c4 /src
parent90b79016981776984b3aa6e77fa1b4df22eef3c5 (diff)
expr: add nft_rule_expr_snprintf
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/expr.c13
-rw-r--r--src/libnftables.map1
-rw-r--r--src/rule.c4
3 files changed, 16 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c
index 678732e..711c18e 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -193,3 +193,16 @@ nft_rule_expr_build_payload(struct nlmsghdr *nlh, struct nft_rule_expr *expr)
mnl_attr_nest_end(nlh, nest1);
}
EXPORT_SYMBOL(nft_rule_expr_build_payload);
+
+int nft_rule_expr_snprintf(char *buf, size_t size, struct nft_rule_expr *expr,
+ uint32_t type, uint32_t flags)
+{
+ int ret;
+ unsigned int offset = 0, len = size;
+
+ ret = expr->ops->snprintf(buf+offset, len, type, flags, expr);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+ return offset;
+}
+EXPORT_SYMBOL(nft_rule_expr_snprintf);
diff --git a/src/libnftables.map b/src/libnftables.map
index 7be6588..9546bca 100644
--- a/src/libnftables.map
+++ b/src/libnftables.map
@@ -89,6 +89,7 @@ global:
nft_rule_expr_get_u64;
nft_rule_expr_get_str;
nft_rule_expr_build_payload;
+ nft_rule_expr_snprintf;
nft_rule_expr_free;
nft_rule_list_alloc;
diff --git a/src/rule.c b/src/rule.c
index 3a35a18..6058878 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -697,7 +697,7 @@ static int nft_rule_snprintf_xml(char *buf, size_t size, struct nft_rule *r,
"<expr type=\"%s\">", expr->ops->name);
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
- ret = expr->ops->snprintf(buf+offset, len, type, flags, expr);
+ ret = nft_rule_expr_snprintf(buf+offset, size, expr, type, flags);
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
ret = snprintf(buf+offset, len, "</expr>");
@@ -726,7 +726,7 @@ static int nft_rule_snprintf_default(char *buf, size_t size, struct nft_rule *r,
ret = snprintf(buf+offset, len, "%s ", expr->ops->name);
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
- ret = expr->ops->snprintf(buf+offset, len, type, flags, expr);
+ ret = nft_rule_expr_snprintf(buf+offset, size, expr, type, flags);
SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
}