diff --git a/T.h b/T.h index 884a9b6f89382ee36fc422748acce4754e501af0..ec7b1d2a0ca6001ed8ce743a7763c22c44bf5a4d 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 b0e6cb00ed24a54a88a7dacc34df15b71285f09f..8cca071ae890325473247f35f83a9483fb9991d0 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 50b1d9339cf7373627d7b0634fd09731a123700b..3552f19df52d0c16652e85afb49f0ffee4258bb5 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 fa19a6237ba3526f1bbd651ee446a51f4422473e..f9da2085bf78df9558fce9f61f9c183020eebb02 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(); }