summaryrefslogtreecommitdiffstats
path: root/src/evaluate.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2014-12-13 07:50:34 +0000
committerPatrick McHardy <kaber@trash.net>2014-12-16 18:20:54 +0100
commit0b915d6dc50e9e5aeb3e41db9d20dc96d9edee3f (patch)
tree01279cb6d61e81e916017e2406afa82ddf9f002a /src/evaluate.c
parentcde2b8bac620caf3858ccab16e82005b3ef27bee (diff)
datatype: add new subtypes field to account number of concat data types
Using the size is confusing since it usually holds the size of the data. Add a new "subtypes" member, which holds the number of datatypes the concat type is made of. Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src/evaluate.c')
-rw-r--r--src/evaluate.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/evaluate.c b/src/evaluate.c
index 07326607..79edf021 100644
--- a/src/evaluate.c
+++ b/src/evaluate.c
@@ -605,10 +605,10 @@ static int expr_evaluate_concat(struct eval_ctx *ctx, struct expr **expr)
{
const struct datatype *dtype = ctx->ectx.dtype, *tmp;
unsigned int type = dtype ? dtype->type : 0;
- int off = dtype ? dtype->size: 0;
+ int off = dtype ? dtype->subtypes : 0;
unsigned int flags = EXPR_F_CONSTANT | EXPR_F_SINGLETON;
struct expr *i, *next;
- unsigned int n;
+ unsigned int n, len = 0;
n = 1;
list_for_each_entry_safe(i, next, &(*expr)->expressions, list) {
@@ -624,11 +624,13 @@ static int expr_evaluate_concat(struct eval_ctx *ctx, struct expr **expr)
return -1;
flags &= i->flags;
+ len += i->len;
n++;
}
(*expr)->flags |= flags;
(*expr)->dtype = concat_type_alloc(*expr);
+ (*expr)->len = len;
if (off > 0)
return expr_error(ctx->msgs, *expr,