From 33fabe9f5fac92454e7a6f9e4bfaea6a28debbb4 Mon Sep 17 00:00:00 2001
From: Sven Robertz <sven@cs.lth.se>
Date: Thu, 7 Mar 2013 13:16:09 +0100
Subject: [PATCH] updated mem_writer to varargs + turned experimental off by
 default

---
 lib/c/Makefile                   |  8 +++++---
 lib/c/labcomm_fd_reader_writer.c |  2 --
 lib/c/labcomm_mem_writer.c       | 18 +++++++++++++++---
 lib/c/labcomm_mem_writer.h       |  2 +-
 4 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/lib/c/Makefile b/lib/c/Makefile
index a17c72d..6d6c81f 100644
--- a/lib/c/Makefile
+++ b/lib/c/Makefile
@@ -16,8 +16,8 @@ TEST_GEN_DIR=$(TESTDATA_DIR)/gen
 
 CREATED_DIRS=$(TEST_DIR) $(TESTDATA_DIR) $(TEST_GEN_DIR)
 
-# Disable experimental objects by invoking make like `make -e LABCOMM_NO_EXPERIMENTAL=true`
-ifneq ($(LABCOMM_NO_EXPERIMENTAL),true)
+# Enable experimental objects by invoking make like `make -e LABCOMM_EXPERIMENTAL=true`
+ifeq ($(LABCOMM_EXPERIMENTAL),true)
 	OBJS += experimental/udp_hack.o experimental/ethaddr.o \
 		experimental/labcomm_thr_reader_writer.o \
 		experimental/ThrottleDrv/ethernet_drv.o \
@@ -48,7 +48,9 @@ ethaddr.o: ethaddr.c
 $(CREATED_DIRS):
 	mkdir -p $@
 
-run-test: $(TEST_DIR)/test_labcomm_errors |$(TEST_DIR)
+## NB! the tests need CUnit to be installed
+run-test: $(TEST_DIR)/test_labcomm $(TEST_DIR)/test_labcomm_errors |$(TEST_DIR)
+	test/test_labcomm
 	test/test_labcomm_errors
 
 $(TEST_DIR)/test_labcomm_errors: $(TEST_DIR)/test_labcomm_errors.o liblabcomm.a |$(TEST_DIR)
diff --git a/lib/c/labcomm_fd_reader_writer.c b/lib/c/labcomm_fd_reader_writer.c
index 7f3e3e3..c76f7ac 100644
--- a/lib/c/labcomm_fd_reader_writer.c
+++ b/lib/c/labcomm_fd_reader_writer.c
@@ -108,9 +108,7 @@ int labcomm_fd_writer(
       struct labcomm_encoder *e = va_arg(argp, struct labcomm_encoder*);
       va_end(argp);
 
-      printf("Sending signature: %s\n", signature->name);
       labcomm_encode_signature(e, signature);
- 
     } break;
     case labcomm_writer_user_action: {
       result = -ENOTSUP;
diff --git a/lib/c/labcomm_mem_writer.c b/lib/c/labcomm_mem_writer.c
index 7275649..dab69f1 100644
--- a/lib/c/labcomm_mem_writer.c
+++ b/lib/c/labcomm_mem_writer.c
@@ -1,6 +1,7 @@
 #include "labcomm_mem_writer.h"
 
-#include "stddef.h"  // For size_t.
+#include <stddef.h>  // For size_t.
+#include <stdarg.h>
 #include <errno.h>
 
 #include "labcomm.h"
@@ -26,8 +27,9 @@ static void copy_data(labcomm_writer_t *w, labcomm_mem_writer_context_t *mcontex
  * Write encoded messages to memory. w->context is assumed to be a pointer to a
  * labcomm_mem_writer_context_t structure.
  */
-int labcomm_mem_writer(labcomm_writer_t *w, labcomm_writer_action_t action)
+int labcomm_mem_writer(labcomm_writer_t *w, labcomm_writer_action_t action, ...)
 {
+  va_list argp;
   int result = 0;
   // Unwrap pointers for easy access.
   labcomm_mem_writer_context_t *mcontext = (labcomm_mem_writer_context_t *) w->context;
@@ -93,7 +95,17 @@ int labcomm_mem_writer(labcomm_writer_t *w, labcomm_writer_action_t action)
     } break;
   case labcomm_writer_available:{
     result = w->count - w->pos;
-        } break;
+     } break;
+  case labcomm_writer_send_signature: {
+    va_start(argp, action);
+    labcomm_signature_t *signature = va_arg(argp, labcomm_signature_t*);
+    struct labcomm_encoder *e = va_arg(argp, struct labcomm_encoder*);
+    va_end(argp);
+    labcomm_encode_signature(e, signature);
+    } break;
+  case labcomm_writer_user_action:{
+     result = -ENOTSUP;
+    } break;
   }
   return result;
 }
diff --git a/lib/c/labcomm_mem_writer.h b/lib/c/labcomm_mem_writer.h
index 4585903..7506342 100644
--- a/lib/c/labcomm_mem_writer.h
+++ b/lib/c/labcomm_mem_writer.h
@@ -11,7 +11,7 @@ struct labcomm_mem_writer_context_t {
   unsigned char *buf;  // Allocated destination buffer.
 };
 
-int labcomm_mem_writer(labcomm_writer_t *w, labcomm_writer_action_t action);
+int labcomm_mem_writer(labcomm_writer_t *w, labcomm_writer_action_t action, ...);
 
 /* Wrapper the internal static function copy_data. This is needed so that the exceptions can be unit tested. */
 void test_copy_data(labcomm_writer_t *w, labcomm_mem_writer_context_t *mcontext, unsigned char *mbuf);
-- 
GitLab