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