From d6e9aecfd67ebfd012873eb24b72221f13e8f089 Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Sun, 16 Dec 2018 23:44:54 +0100 Subject: [PATCH] String type: Not include \0 in show_version The string type does not include the \0 in strings. Change-Id: I869f438b84880df40a018e43b4510194d84ce0fe Signed-off-by: Ole Troan --- src/vat/api_format.c | 34 +++++++++++++++++++++++----------- src/vlibapi/api_types.h | 6 ++++++ src/vpp/api/api.c | 9 ++++----- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/vat/api_format.c b/src/vat/api_format.c index f7e076764aa..4c43fcfaa20 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -1302,18 +1302,30 @@ static void vl_api_show_version_reply_t_handler if (retval >= 0) { + char *s; char *p = (char *) &mp->program; - errmsg (" program: %s\n", - vl_api_from_api_string ((vl_api_string_t *) p)); - p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32); - errmsg (" version: %s\n", - vl_api_from_api_string ((vl_api_string_t *) p)); - p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32); - errmsg (" build date: %s\n", - vl_api_from_api_string ((vl_api_string_t *) p)); - p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32); - errmsg ("build directory: %s\n", - vl_api_from_api_string ((vl_api_string_t *) p)); + + s = vl_api_from_api_string_c ((vl_api_string_t *) p); + errmsg (" program: %s\n", s); + free (s); + + p += + vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t); + s = vl_api_from_api_string_c ((vl_api_string_t *) p); + errmsg (" version: %s\n", s); + free (s); + + p += + vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t); + s = vl_api_from_api_string_c ((vl_api_string_t *) p); + errmsg (" build date: %s\n", s); + free (s); + + p += + vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t); + s = vl_api_from_api_string_c ((vl_api_string_t *) p); + errmsg ("build directory: %s\n", s); + free (s); } vam->retval = retval; vam->result_ready = 1; diff --git a/src/vlibapi/api_types.h b/src/vlibapi/api_types.h index ffcd24d12b2..8a86612f0fb 100644 --- a/src/vlibapi/api_types.h +++ b/src/vlibapi/api_types.h @@ -50,4 +50,10 @@ vl_api_string_len (vl_api_string_t * astr) return clib_net_to_host_u32 (astr->length); } +static inline char * +vl_api_from_api_string_c (vl_api_string_t *astr) +{ + return strndup((char *)astr->buf, clib_net_to_host_u32(astr->length)); +} + #endif diff --git a/src/vpp/api/api.c b/src/vpp/api/api.c index 8e2e4cd75a6..3fce77acfc8 100644 --- a/src/vpp/api/api.c +++ b/src/vpp/api/api.c @@ -251,11 +251,10 @@ vl_api_show_version_t_handler (vl_api_show_version_t * mp) char *vpe_api_get_version (void); char *vpe_api_get_build_date (void); - u32 program_len = strnlen_s ("vpe", 32) + 1; - u32 version_len = strnlen_s (vpe_api_get_version (), 32) + 1; - u32 build_date_len = strnlen_s (vpe_api_get_build_date (), 32) + 1; - u32 build_directory_len = - strnlen_s (vpe_api_get_build_directory (), 256) + 1; + u32 program_len = strnlen_s ("vpe", 32); + u32 version_len = strnlen_s (vpe_api_get_version (), 32); + u32 build_date_len = strnlen_s (vpe_api_get_build_date (), 32); + u32 build_directory_len = strnlen_s (vpe_api_get_build_directory (), 256); u32 n = program_len + version_len + build_date_len + build_directory_len; -- 2.16.6