diff --git a/lib/c/labcomm_encoder.c b/lib/c/labcomm_encoder.c index 17d7eb6231a0b6d01df5ed6b34434c5e057871b2..c7246bedaf08b3c746139bef02c1ad65d98c16fc 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;