From: Thierry FOURNIER Date: Wed, 19 Aug 2015 07:05:25 +0000 (+0200) Subject: MEDIUM: pattern/map: Maps can returns various types X-Git-Tag: v1.6-dev4~53 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7d4335c935091b3daf670012860d5fa38313241d;p=thirdparty%2Fhaproxy.git MEDIUM: pattern/map: Maps can returns various types A map can store and return various types as output. The only one example is the IPv4 and IPv6 types. The previous patch remove the type from the sample storage struct and use the conoverter output type, expecting that all entries of the map have the same type. This will be wrong when the maps will support both IPv4 and IPv6 as output. --- diff --git a/include/types/applet.h b/include/types/applet.h index ff82ef3c50..2e8a297fff 100644 --- a/include/types/applet.h +++ b/include/types/applet.h @@ -95,7 +95,6 @@ struct appctx { unsigned int display_flags; struct pat_ref *ref; struct pat_ref_elt *elt; - struct map_descriptor *desc; struct pattern_expr *expr; struct chunk chunk; } map; diff --git a/src/dumpstats.c b/src/dumpstats.c index d1c48859e4..0621f1ff7a 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -5619,11 +5619,6 @@ static int stats_map_lookup(struct stream_interface *si) appctx->ctx.map.expr = LIST_ELEM(&appctx->ctx.map.ref->pat, struct pattern_expr *, list); appctx->ctx.map.expr = pat_expr_get_next(appctx->ctx.map.expr, &appctx->ctx.map.ref->pat); appctx->st2 = STAT_ST_LIST; - - /* retrieve one of the compatible map descriptor for learnig the type. */ - if (appctx->ctx.map.display_flags == PAT_REF_MAP) - appctx->ctx.map.desc = container_of(appctx->ctx.map.expr->pat_head, - struct map_descriptor, pat); /* fall through */ case STAT_ST_LIST: @@ -5698,7 +5693,7 @@ static int stats_map_lookup(struct stream_interface *si) if (appctx->ctx.map.display_flags == PAT_REF_MAP) { if (pat->data && pat->ref && pat->ref->sample) chunk_appendf(&trash, ", value=\"%s\", type=\"%s\"", pat->ref->sample, - smp_to_type[appctx->ctx.map.desc->conv->out_type]); + smp_to_type[pat->data->type]); else chunk_appendf(&trash, ", value=none"); }