From 0c09f573ca7094a5d2b72fcd5a9920a737f28831 Mon Sep 17 00:00:00 2001 From: Sven Gestegard Robertz <sven.robertz@cs.lth.se> Date: Sat, 25 Oct 2014 08:56:03 +0200 Subject: [PATCH] alloc and copy pragma_type --- lib/c/labcomm_encoder.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/c/labcomm_encoder.c b/lib/c/labcomm_encoder.c index 17d7eb6..c7246be 100644 --- a/lib/c/labcomm_encoder.c +++ b/lib/c/labcomm_encoder.c @@ -100,22 +100,31 @@ struct labcomm_encoder *labcomm_pragma_builder_new( char * pragma_type) { struct labcomm_writer *dyn_writer = labcomm_dynamic_buffer_writer_new( e->memory); - struct labcomm_encoder *mdt = labcomm_encoder_new(dyn_writer, + struct labcomm_encoder *pb = labcomm_encoder_new(dyn_writer, e->error, e->memory, e->scheduler); + size_t tlen = 1+strlen(pragma_type); + char* ptype = labcomm_memory_alloc( + e->memory, + 1, + tlen); + if(ptype) { + strncpy(ptype, pragma_type, tlen); + } //XXX TODO: and else? + struct pragma_packet_builder* ctxt = labcomm_memory_alloc( e->memory, 1, sizeof(struct pragma_packet_builder)); if(ctxt){ - ctxt->pragma_type=pragma_type; + ctxt->pragma_type=ptype; ctxt->parent=e; } - mdt->context_type = LABCOMM_PRAGMA; - mdt->context = ctxt; - return mdt; + pb->context_type = LABCOMM_PRAGMA; + pb->context = ctxt; + return pb; } //HERE BE DRAGONS! Copied from decoder.c @@ -196,6 +205,8 @@ int labcomm_pragma_send(struct labcomm_encoder* e) err = p->writer->error; } free_encoder: + //XXX are these needed, or is that done in encoder_free? + labcomm_memory_free(e->memory, 1, ctx->pragma_type); labcomm_memory_free(e->memory, 1, ctx); labcomm_encoder_free(e); return err; -- GitLab