]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
expr: make expr_binary_error() usable outside of evaluation
authorPatrick McHardy <kaber@trash.net>
Thu, 6 Mar 2014 15:29:52 +0000 (16:29 +0100)
committerPatrick McHardy <kaber@trash.net>
Fri, 7 Mar 2014 09:18:42 +0000 (10:18 +0100)
Turn the eval_ctx argument into a list_head to queue the error to.

Signed-off-by: Patrick McHardy <kaber@trash.net>
include/expression.h
src/expression.c
src/payload.c

index ac6a4f4a93705bc29c86fcf6cb5af41b02493916..354e679cc30c73be9e9aa9fe994fda9ed94b28ac 100644 (file)
@@ -268,12 +268,12 @@ extern void expr_set_type(struct expr *expr, const struct datatype *dtype,
                          enum byteorder byteorder);
 
 struct eval_ctx;
-extern int expr_binary_error(struct eval_ctx *ctx,
+extern int expr_binary_error(struct list_head *msgs,
                             const struct expr *e1, const struct expr *e2,
                             const char *fmt, ...) __gmp_fmtstring(4, 5);
 
-#define expr_error(ctx, expr, fmt, args...) \
-       expr_binary_error(ctx, expr, NULL, fmt, ## args)
+#define expr_error(msgs, expr, fmt, args...) \
+       expr_binary_error(msgs, expr, NULL, fmt, ## args)
 
 static inline bool expr_is_constant(const struct expr *expr)
 {
index adaf6e7894a9a30de186ea2b329847bb498c3e32..cdc2b7b06a250d69417e4eb46bf90b57bf92779f 100644 (file)
@@ -127,7 +127,7 @@ const struct datatype *expr_basetype(const struct expr *expr)
        return type;
 }
 
-int __fmtstring(4, 5) expr_binary_error(struct eval_ctx *ctx,
+int __fmtstring(4, 5) expr_binary_error(struct list_head *msgs,
                                        const struct expr *e1, const struct expr *e2,
                                        const char *fmt, ...)
 {
@@ -139,7 +139,7 @@ int __fmtstring(4, 5) expr_binary_error(struct eval_ctx *ctx,
        if (e2 != NULL)
                erec_add_location(erec, &e2->location);
        va_end(ap);
-       erec_queue(erec, ctx->msgs);
+       erec_queue(erec, msgs);
        return -1;
 }
 
index a312e0796f6237deeefe5c2adc55d673cf026a05..9f2db6d95b7235a00f8dba564226018fd9054a71 100644 (file)
@@ -154,12 +154,12 @@ int payload_gen_dependency(struct eval_ctx *ctx, const struct expr *expr,
 
        if (expr->payload.base < h->base) {
                if (expr->payload.base < h->base - 1)
-                       return expr_error(ctx, expr,
+                       return expr_error(ctx->msgs, expr,
                                          "payload base is invalid for this "
                                          "family");
 
                if (proto_dev_type(expr->payload.desc, &type) < 0)
-                       return expr_error(ctx, expr,
+                       return expr_error(ctx->msgs, expr,
                                          "protocol specification is invalid "
                                          "for this family");
 
@@ -181,14 +181,14 @@ int payload_gen_dependency(struct eval_ctx *ctx, const struct expr *expr,
                desc = &proto_inet_service;
 
        if (desc == NULL)
-               return expr_error(ctx, expr,
+               return expr_error(ctx->msgs, expr,
                                  "ambiguous payload specification: "
                                  "no %s protocol specified",
                                  proto_base_names[expr->payload.base - 1]);
 
        protocol = proto_find_num(desc, expr->payload.desc);
        if (protocol < 0)
-               return expr_error(ctx, expr,
+               return expr_error(ctx->msgs, expr,
                                  "conflicting protocols specified: %s vs. %s",
                                  desc->name, expr->payload.desc->name);