]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
datatype: convert chain name from gmp value to string
authorPablo Neira Ayuso <pablo@netfilter.org>
Sat, 4 Jul 2020 00:43:40 +0000 (02:43 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 15 Jul 2020 19:56:18 +0000 (21:56 +0200)
Add expr_chain_export() helper function to convert the chain name that
is stored in a gmp value variable to string.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/datatype.h
src/datatype.c

index 04b4892b29acd4dc991ee7910252ff957c2d32b1..1061a389b0f03bce05b8b91ed6c4c0d9fa3ae1d8 100644 (file)
@@ -305,4 +305,6 @@ extern struct error_record *rate_parse(const struct location *loc,
 extern struct error_record *data_unit_parse(const struct location *loc,
                                            const char *str, uint64_t *rate);
 
+extern void expr_chain_export(const struct expr *e, char *chain);
+
 #endif /* NFTABLES_DATATYPE_H */
index 90905258bc307f019199fcb902667f7584d94059..7382307e990947289c81285a20021a626e6e8825 100644 (file)
@@ -247,20 +247,25 @@ const struct datatype invalid_type = {
        .print          = invalid_type_print,
 };
 
+void expr_chain_export(const struct expr *e, char *chain_name)
+{
+       unsigned int len;
+
+       len = e->len / BITS_PER_BYTE;
+       if (len >= NFT_CHAIN_MAXNAMELEN)
+               BUG("verdict expression length %u is too large (%u bits max)",
+                   e->len, NFT_CHAIN_MAXNAMELEN * BITS_PER_BYTE);
+
+       mpz_export_data(chain_name, e->value, BYTEORDER_HOST_ENDIAN, len);
+}
+
 static void verdict_jump_chain_print(const char *what, const struct expr *e,
                                     struct output_ctx *octx)
 {
        char chain[NFT_CHAIN_MAXNAMELEN];
-       unsigned int len;
 
        memset(chain, 0, sizeof(chain));
-
-       len = e->len / BITS_PER_BYTE;
-       if (len >= sizeof(chain))
-               BUG("verdict expression length %u is too large (%lu bits max)",
-                   e->len, (unsigned long)sizeof(chain) * BITS_PER_BYTE);
-
-       mpz_export_data(chain, e->value, BYTEORDER_HOST_ENDIAN, len);
+       expr_chain_export(e, chain);
        nft_print(octx, "%s %s", what, chain);
 }