From: Patrick McHardy Date: Sat, 13 Jun 2015 12:48:56 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/next-4.1' X-Git-Tag: v0.5~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=077509fdea3aa009823491be7096749c84795874;p=thirdparty%2Fnftables.git Merge remote-tracking branch 'origin/next-4.1' --- 077509fdea3aa009823491be7096749c84795874 diff --cc src/netlink_delinearize.c index 2865e8ede,08fd58084..9ee43ba4d --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@@ -1002,10 -1076,27 +1089,27 @@@ static void expr_postprocess(struct rul break; case EXPR_SET: list_for_each_entry(i, &expr->expressions, list) - expr_postprocess(ctx, stmt, &i); + expr_postprocess(ctx, &i); break; + case EXPR_CONCAT: { + unsigned int type = expr->dtype->type, ntype = 0; + int off = expr->dtype->subtypes; + const struct datatype *dtype; + + list_for_each_entry(i, &expr->expressions, list) { + if (type) { + dtype = concat_subtype_lookup(type, --off); + expr_set_type(i, dtype, dtype->byteorder); + } + expr_postprocess(ctx, stmt, &i); + + ntype = concat_subtype_add(ntype, i->dtype->type); + } + expr->dtype = concat_type_alloc(ntype); + break; + } case EXPR_UNARY: - expr_postprocess(ctx, stmt, &expr->arg); + expr_postprocess(ctx, &expr->arg); expr_set_type(expr->arg, expr->arg->dtype, !expr->arg->byteorder); *exprp = expr_get(expr->arg);