From 4b68033b2dc24df6800097f5f16b0352d4f4b9e3 Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Tue, 15 Mar 2016 10:43:10 +0100
Subject: [PATCH] some work for buffer handling

---
 T.h            | 12 +++++++-----
 T_messages.txt |  1 +
 main.c         |  6 ++++--
 tracer/main.c  | 13 +++++++++++--
 4 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/T.h b/T.h
index 884a9b6f89..ec7b1d2a0c 100644
--- a/T.h
+++ b/T.h
@@ -36,10 +36,12 @@
 
 #define T_PUT_buffer(argnum, val) \
   do { \
-    T_buffer T_PUT_var = (val); \
-    T_CHECK_SIZE(T_PUT_var.length, argnum); \
-    memcpy(T_LOCAL_buf + T_LOCAL_size, T_PUT_var.addr, T_PUT_var.length); \
-    T_LOCAL_size += T_PUT_var.length; \
+    T_buffer T_PUT_buffer_var = (val); \
+    T_PUT_int(argnum, T_PUT_buffer_var.length); \
+    T_CHECK_SIZE(T_PUT_buffer_var.length, argnum); \
+    memcpy(T_LOCAL_buf + T_LOCAL_size, T_PUT_buffer_var.addr, \
+           T_PUT_buffer_var.length); \
+    T_LOCAL_size += T_PUT_buffer_var.length; \
   } while (0)
 
 #define T_PUT_string(argnum, val) \
@@ -117,7 +119,7 @@ extern T_cache_t *T_cache;
   T_send(T_LOCAL_buf, T_LOCAL_size)
 
 #define T_CHECK_SIZE(len, argnum) \
-  if (T_LOCAL_size + len > T_BUFFER_MAX) { \
+  if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \
     printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \
              ", consider increasing T_BUFFER_MAX (%d)\n", \
              __FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \
diff --git a/T_messages.txt b/T_messages.txt
index b0e6cb00ed..8cca071ae8 100644
--- a/T_messages.txt
+++ b/T_messages.txt
@@ -138,3 +138,4 @@ ID = LEGACY_CLI_DEBUG
 ID = LEGACY_CLI_TRACE
 
 ID = first
+ID = buf_test
diff --git a/main.c b/main.c
index 50b1d9339c..3552f19df5 100644
--- a/main.c
+++ b/main.c
@@ -10,8 +10,10 @@ int main(void)
   T_connect_to_tracer("127.0.0.1", 2020);
   printf("after connect\n");
   while (1) {
-    T(T_first, T_PRINTF("hello world %s!\n", "yo"));
-    //usleep(1);
+    char *buf = "hello world %s!\n";
+    //T(T_first, T_PRINTF("hello world %s!\n", "yo"));
+    T(T_buf_test, T_BUFFER("hello world %s!\n", strlen(buf)+1));
+    usleep(1);
   }
   while (1) pause();
 
diff --git a/tracer/main.c b/tracer/main.c
index fa19a6237b..f9da2085bf 100644
--- a/tracer/main.c
+++ b/tracer/main.c
@@ -73,7 +73,7 @@ void get_string(int s, char *out)
 void get_message(int s)
 {
 #define S(x, y) do { \
-    char str[1024]; \
+    char str[T_BUFFER_MAX]; \
     get_string(s, str); \
     printf("["x"]["y"] %s", str); \
   } while (0)
@@ -85,7 +85,7 @@ void get_message(int s)
   if (GET(s, &m, sizeof(int)) != sizeof(int)) abort();
   switch (m) {
   case T_first: {
-    char str[1024];
+    char str[T_BUFFER_MAX];
     get_string(s, str);
     printf("%s", str);
     break;
@@ -195,6 +195,15 @@ void get_message(int s)
   case T_LEGACY_CLI_WARNING: S("CLI", "WARNING"); break;
   case T_LEGACY_CLI_DEBUG: S("CLI", "DEBUG"); break;
   case T_LEGACY_CLI_TRACE: S("CLI", "TRACE"); break;
+  case T_buf_test: {
+    unsigned char buf[T_BUFFER_MAX];
+    int size;
+    GET(s, &size, sizeof(int));
+    GET(s, buf, size);
+    printf("got buffer size %d %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x\n",
+           size, buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10],buf[11],buf[12],buf[13],buf[14],buf[15]);
+    break;
+  }
   default: printf("unkown message type %d\n", m); abort();
   }
 
-- 
GitLab