summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2014-03-17 23:03:43 +0100
committerFlorian Westphal <fw@strlen.de>2014-04-04 17:32:46 +0200
commit0944e150257211db42ce0e3369be5be684693761 (patch)
tree03338d80ee978b880fa13dcfda4e2e4be179d8ac
parentde8ef82c867fee5594b3d835df79c2898a14b3ae (diff)
expr: do not suppress OP_EQ when RHS is bitmask type
bitmask types default to flagcmp now, thus do not suppress OP_EQ. Else, rule filter output tcp flags syn rule filter output tcp flags == syn are both displayed as 'flags syn'. Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r--src/expression.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/expression.c b/src/expression.c
index 13139256..fa14d99c 100644
--- a/src/expression.c
+++ b/src/expression.c
@@ -514,13 +514,21 @@ static void binop_arg_print(const struct expr *op, const struct expr *arg)
printf(")");
}
+static bool must_print_eq_op(const struct expr *expr)
+{
+ if (expr->right->dtype->basetype != NULL &&
+ expr->right->dtype->basetype->type == TYPE_BITMASK)
+ return true;
+
+ return expr->left->ops->type == EXPR_BINOP;
+}
+
static void binop_expr_print(const struct expr *expr)
{
binop_arg_print(expr, expr->left);
if (expr_op_symbols[expr->op] &&
- (expr->op != OP_EQ ||
- expr->left->ops->type == EXPR_BINOP))
+ (expr->op != OP_EQ || must_print_eq_op(expr)))
printf(" %s ", expr_op_symbols[expr->op]);
else
printf(" ");