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