diff options
author | Phil Sutter <phil@nwl.cc> | 2017-09-28 17:17:45 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2017-09-29 12:37:51 +0200 |
commit | 2535ba7006f22a6470f4c88ea7d30c343a1d8799 (patch) | |
tree | e09697d8d9a59394170fa412276346d64b5b62e7 /src/ct.c | |
parent | 15a1f5bd55735f6f65a6fd9e2e86bb4a3f5ac815 (diff) |
src: get rid of printf
This patch introduces nft_print()/nft_gmp_print() functions which have
to be used instead of printf to output information that were previously
send to stdout. These functions print to a FILE pointer defined in
struct output_ctx. It is set by calling:
| old_fp = nft_ctx_set_output(ctx, new_fp);
Having an application-defined FILE pointer is actually quite flexible:
Using fmemopen() or even fopencookie(), an application gains full
control over what is printed and where it should go to.
Signed-off-by: Eric Leblond <eric@regit.org>
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/ct.c')
-rw-r--r-- | src/ct.c | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -141,11 +141,11 @@ static void ct_label_type_print(const struct expr *expr, for (s = ct_label_tbl->symbols; s->identifier != NULL; s++) { if (bit != s->value) continue; - printf("\"%s\"", s->identifier); + nft_print(octx, "\"%s\"", s->identifier); return; } /* can happen when connlabel.conf is altered after rules were added */ - printf("%ld\n", (long)mpz_scan1(expr->value, 0)); + nft_print(octx, "%ld\n", (long)mpz_scan1(expr->value, 0)); } static struct error_record *ct_label_type_parse(const struct expr *sym, @@ -269,27 +269,27 @@ static const struct ct_template ct_templates[] = { BYTEORDER_HOST_ENDIAN, 32), }; -static void ct_print(enum nft_ct_keys key, int8_t dir) +static void ct_print(enum nft_ct_keys key, int8_t dir, struct output_ctx *octx) { const struct symbolic_constant *s; - printf("ct "); + nft_print(octx, "ct "); if (dir < 0) goto done; for (s = ct_dir_tbl.symbols; s->identifier != NULL; s++) { if (dir == (int)s->value) { - printf("%s ", s->identifier); + nft_print(octx, "%s ", s->identifier); break; } } done: - printf("%s", ct_templates[key].token); + nft_print(octx, "%s", ct_templates[key].token); } static void ct_expr_print(const struct expr *expr, struct output_ctx *octx) { - ct_print(expr->ct.key, expr->ct.direction); + ct_print(expr->ct.key, expr->ct.direction, octx); } static bool ct_expr_cmp(const struct expr *e1, const struct expr *e2) @@ -385,8 +385,8 @@ void ct_expr_update_type(struct proto_ctx *ctx, struct expr *expr) static void ct_stmt_print(const struct stmt *stmt, struct output_ctx *octx) { - ct_print(stmt->ct.key, stmt->ct.direction); - printf(" set "); + ct_print(stmt->ct.key, stmt->ct.direction, octx); + nft_print(octx, " set "); expr_print(stmt->ct.expr, octx); } @@ -412,7 +412,7 @@ struct stmt *ct_stmt_alloc(const struct location *loc, enum nft_ct_keys key, static void notrack_stmt_print(const struct stmt *stmt, struct output_ctx *octx) { - printf("notrack"); + nft_print(octx, "notrack"); } static const struct stmt_ops notrack_stmt_ops = { |