]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
expr: add nft_rule_expr_snprintf
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 19 Jun 2013 15:53:25 +0000 (17:53 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 19 Jun 2013 15:54:31 +0000 (17:54 +0200)
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/libnftables/expr.h
src/expr.c
src/libnftables.map
src/rule.c

index 38cd6983b03c0931ee0ad3b14dcaa7cc5bd32d3a..2c319ab00712946a14325a7ebae092c9047f1753 100644 (file)
@@ -32,6 +32,8 @@ const char *nft_rule_expr_get_str(const struct nft_rule_expr *expr, uint16_t typ
 
 void nft_rule_expr_build_payload(struct nlmsghdr *nlh, struct nft_rule_expr *expr);
 
+int nft_rule_expr_snprintf(char *buf, size_t buflen, struct nft_rule_expr *expr, uint32_t type, uint32_t flags);
+
 enum {
        NFT_EXPR_PAYLOAD_DREG   = NFT_RULE_EXPR_ATTR_BASE,
        NFT_EXPR_PAYLOAD_BASE,
index 678732ee8b16781fdbf366f85cb807246240b42e..711c18ec8fcae177c9a5f552f9e137b17811c9dd 100644 (file)
@@ -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);
index 7be65880ffc82f9a6b08e8e3788ea1be1dfddaec..9546bca5b3b089507cd8edfaf4efb25a686ac91e 100644 (file)
@@ -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;
index 3a35a18ad5d89288a9aefe40df6347a52ef7cf60..6058878e7ce3f9f727c467254a67403d17cb7eb4 100644 (file)
@@ -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);
        }