Re: [nft PATCH] set_expr: Allow passing the parent set to set_expr_alloc()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11 July 2017 at 23:59, Phil Sutter <phil@xxxxxx> wrote:
> Usually one wants to at least initialize set_flags from the parent, so
> make allocation of a set's set expression more convenient.
>
> The idea to do this came when fixing an issue with output formatting of
> larger anonymous sets in nft monitor: Since
> netlink_events_cache_addset() didn't initialize set_flags,
> calculate_delim() didn't detect it's an anonymous set and therefore
> added newlines to the output.
>
> Reported-by: Arturo Borrero Gonzalez <arturo@xxxxxxxxxxxxx>
> Fixes: a9dc3ceabc10f ("expression: print sets and maps in pretty format")
> Signed-off-by: Phil Sutter <phil@xxxxxx>
> ---

Thanks for working on this Phil :-)

some comments below

> diff --git a/src/expression.c b/src/expression.c
> index f90ca6035bd3a..f51fbae281b95 100644
> --- a/src/expression.c
> +++ b/src/expression.c
> @@ -824,9 +824,16 @@ static const struct expr_ops set_expr_ops = {
>         .destroy        = compound_expr_destroy,
>  };
>
> -struct expr *set_expr_alloc(const struct location *loc)
> +struct expr *set_expr_alloc(const struct location *loc, const struct set *set)
>  {
> -       return compound_expr_alloc(loc, &set_expr_ops);
> +       struct expr *set_expr = compound_expr_alloc(loc, &set_expr_ops);
> +
> +       if (set) {
> +               set_expr->set_flags = set->flags;
> +               set_expr->dtype = set->keytype;
> +       }
> +
> +       return set_expr;
>  }

What about:

if (!set)
     return set_expr;

set_expr->set_flags = set->flags;
[..]
return set_expr;


> diff --git a/src/segtree.c b/src/segtree.c
> index a2316a7b98041..f53536210018d 100644
> --- a/src/segtree.c
> +++ b/src/segtree.c
> @@ -602,10 +602,12 @@ static int expr_value_cmp(const void *p1, const void *p2)
>         int ret;
>
>         ret = mpz_cmp(expr_value(e1)->value, expr_value(e2)->value);
> -       if (ret == 0 && (e1->flags & EXPR_F_INTERVAL_END))
> -               return -1;
> -       else
> -               return 1;
> +       if (ret == 0) {
> +               if (e1->flags & EXPR_F_INTERVAL_END)
> +                       return -1;
> +               else if (e2->flags & EXPR_F_INTERVAL_END)
> +                       return 1;
> +       }
>
>         return ret;
>  }
> --

^^^
this last chunk belongs to another patch?
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux