From d05b7f51d8db8b8081e1768b69802d992c20040c Mon Sep 17 00:00:00 2001 From: Toyomasa Watarai Date: Mon, 25 Aug 2014 16:13:43 +0900 Subject: [PATCH] Fixed crash issue in RawSerial::printf for uARM Fixed crash issue in RawSerial::printf() function for microlib platforms since microlib doesn't fully support C99 functions such as vsnprintf(). --- libraries/mbed/common/RawSerial.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libraries/mbed/common/RawSerial.cpp b/libraries/mbed/common/RawSerial.cpp index dc5db7a3fc..4b1ff39ff3 100644 --- a/libraries/mbed/common/RawSerial.cpp +++ b/libraries/mbed/common/RawSerial.cpp @@ -47,6 +47,13 @@ int RawSerial::puts(const char *str) { int RawSerial::printf(const char *format, ...) { std::va_list arg; va_start(arg, format); +#if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler + char *temp; + temp = (char*)alloca(STRING_STACK_LIMIT); + vsprintf(temp, format, arg); + puts(temp); + int len = strlen(temp); +#else int len = vsnprintf(NULL, 0, format, arg); if (len < STRING_STACK_LIMIT) { char temp[STRING_STACK_LIMIT]; @@ -58,6 +65,7 @@ int RawSerial::printf(const char *format, ...) { puts(temp); delete[] temp; } +#endif va_end(arg); return len; }