fix rt_kprintf issue, which found by Grissiom.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2507 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
bernard.xiong@gmail.com 2012-12-22 08:57:26 +00:00
parent 6346ab09d8
commit 0094caa850
1 changed files with 9 additions and 1 deletions

View File

@ -17,6 +17,7 @@
* 2010-04-15 Bernard remove weak definition on ICCM16C compiler * 2010-04-15 Bernard remove weak definition on ICCM16C compiler
* 2012-07-18 Arda add the alignment display for signed integer * 2012-07-18 Arda add the alignment display for signed integer
* 2012-11-23 Bernard fix IAR compiler error. * 2012-11-23 Bernard fix IAR compiler error.
* 2012-12-22 Bernard fix rt_kprintf issue, which found by Grissiom.
*/ */
#include <rtthread.h> #include <rtthread.h>
@ -1077,7 +1078,14 @@ void rt_kprintf(const char *fmt, ...)
static char rt_log_buf[RT_CONSOLEBUF_SIZE]; static char rt_log_buf[RT_CONSOLEBUF_SIZE];
va_start(args, fmt); va_start(args, fmt);
length = vsnprintf(rt_log_buf, sizeof(rt_log_buf), fmt, args); /* the return value of vsnprintf is the number of bytes that would be
* written to buffer had if the size of the buffer been sufficiently
* 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);
if (length > RT_CONSOLEBUF_SIZE - 1)
length = RT_CONSOLEBUF_SIZE - 1;
#ifdef RT_USING_DEVICE #ifdef RT_USING_DEVICE
if (_console_device == RT_NULL) if (_console_device == RT_NULL)
{ {