Instead of dedicating an object for it ('{ "*": null }'), just use a
string consisting of an asterisk as sole character.

Signed-off-by: Phil Sutter <p...@nwl.cc>
---
 src/parser_json.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/src/parser_json.c b/src/parser_json.c
index 336092b77c6ad..1d60db47f718c 100644
--- a/src/parser_json.c
+++ b/src/parser_json.c
@@ -278,13 +278,21 @@ static struct expr *json_parse_constant(struct json_ctx 
*ctx, const char *name)
        return NULL;
 }
 
+static struct expr *wildcard_expr_alloc(void)
+{
+       struct expr *expr;
+
+       expr = constant_expr_alloc(int_loc, &integer_type,
+                                  BYTEORDER_HOST_ENDIAN, 0, NULL);
+       return prefix_expr_alloc(int_loc, expr, 0);
+}
+
 /* this is a combination of symbol_expr, integer_expr, boolean_expr ... */
 static struct expr *json_parse_immediate(struct json_ctx *ctx, json_t *root)
 {
        enum symbol_types symtype = SYMBOL_VALUE;
        const char *str;
        char buf[64] = {};
-       struct expr;
 
        switch (json_typeof(root)) {
        case JSON_STRING:
@@ -292,6 +300,8 @@ static struct expr *json_parse_immediate(struct json_ctx 
*ctx, json_t *root)
                if (str[0] == '@') {
                        symtype = SYMBOL_SET;
                        str++;
+               } else if (str[0] == '*' && str[1] == '\0') {
+                       return wildcard_expr_alloc();
                } else if (is_keyword(str)) {
                        return symbol_expr_alloc(int_loc,
                                                 SYMBOL_VALUE, NULL, str);
@@ -974,16 +984,6 @@ static struct expr *json_parse_range_expr(struct json_ctx 
*ctx,
        return range_expr_alloc(int_loc, expr_low, expr_high);
 }
 
-static struct expr *json_parse_wildcard_expr(struct json_ctx *ctx,
-                                            const char *type, json_t *root)
-{
-       struct expr *expr;
-
-       expr = constant_expr_alloc(int_loc, &integer_type,
-                                  BYTEORDER_HOST_ENDIAN, 0, NULL);
-       return prefix_expr_alloc(int_loc, expr, 0);
-}
-
 static struct expr *json_parse_verdict_expr(struct json_ctx *ctx,
                                            const char *type, json_t *root)
 {
@@ -1153,7 +1153,6 @@ static struct expr *json_parse_expr(struct json_ctx *ctx, 
json_t *root)
                /* below three are multiton_rhs_expr */
                { "prefix", json_parse_prefix_expr, CTX_F_RHS | CTX_F_STMT },
                { "range", json_parse_range_expr, CTX_F_RHS | CTX_F_STMT },
-               { "*", json_parse_wildcard_expr, CTX_F_RHS | CTX_F_STMT },
                { "payload", json_parse_payload_expr, CTX_F_STMT | 
CTX_F_PRIMARY | CTX_F_SET_RHS | CTX_F_MANGLE | CTX_F_SES | CTX_F_MAP },
                { "exthdr", json_parse_exthdr_expr, CTX_F_PRIMARY | 
CTX_F_SET_RHS | CTX_F_SES | CTX_F_MAP },
                { "tcp option", json_parse_tcp_option_expr, CTX_F_PRIMARY | 
CTX_F_SET_RHS | CTX_F_MANGLE | CTX_F_SES },
-- 
2.17.0

--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to