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