From 7b0a3afdf90e85cabe3e39f49a5c2aa22e3e3e8d Mon Sep 17 00:00:00 2001 From: Grissiom Date: Mon, 23 Sep 2013 11:27:48 +0800 Subject: kservice: export vsnprintf as rt_vsnprintf vsnprintf is a common string function that could be used in many places. Using both vsnprintf in libc and vsnprintf in the RTT could make a bigger image. Moreover, if newlib is not enabled when compiling with GCC, referencing vsnprintf will lead to link error: .../arm-none-eabi/lib/armv7-ar/thumb/softfp/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk' collect2: error: ld returned 1 exit status Using rt_vsnprintf could avoid such problem. --- src/kservice.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/kservice.c b/src/kservice.c index ff5ff9de2a..c2fa43ba73 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -718,10 +718,10 @@ static char *print_number(char *buf, return buf; } -static rt_int32_t vsnprintf(char *buf, - rt_size_t size, - const char *fmt, - va_list args) +rt_int32_t rt_vsnprintf(char *buf, + rt_size_t size, + const char *fmt, + va_list args) { #ifdef RT_PRINTF_LONGLONG unsigned long long num; @@ -976,6 +976,7 @@ static rt_int32_t vsnprintf(char *buf, */ return str - buf; } +RTM_EXPORT(rt_vsnprintf); /** * This function will fill a formatted string to buffer @@ -990,7 +991,7 @@ rt_int32_t rt_snprintf(char *buf, rt_size_t size, const char *fmt, ...) va_list args; va_start(args, fmt); - n = vsnprintf(buf, size, fmt, args); + n = rt_vsnprintf(buf, size, fmt, args); va_end(args); return n; @@ -1006,7 +1007,7 @@ RTM_EXPORT(rt_snprintf); */ rt_int32_t rt_vsprintf(char *buf, const char *format, va_list arg_ptr) { - return vsnprintf(buf, (rt_size_t) -1, format, arg_ptr); + return rt_vsnprintf(buf, (rt_size_t) -1, format, arg_ptr); } RTM_EXPORT(rt_vsprintf); @@ -1114,7 +1115,7 @@ void rt_kprintf(const char *fmt, ...) * large excluding the terminating null byte. If the output string * would be larger than the rt_log_buf, we have to adjust the output * length. */ - length = vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args); + length = rt_vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args); if (length > RT_CONSOLEBUF_SIZE - 1) length = RT_CONSOLEBUF_SIZE - 1; #ifdef RT_USING_DEVICE -- cgit v1.3.1