add vprintf to Rawserial.

pull/10043/head
Wilfried Chauveau 2019-03-06 11:16:10 +00:00
parent bb61ea1433
commit 8b605069f7
No known key found for this signature in database
GPG Key ID: FD66024FC8A1D433
2 changed files with 10 additions and 2 deletions

View File

@ -63,9 +63,16 @@ int RawSerial::puts(const char *str)
// length is above a certain threshold, otherwise we use just the stack.
int RawSerial::printf(const char *format, ...)
{
lock();
std::va_list arg;
va_start(arg, format);
int len = this->vprintf(format, arg);
va_end(arg);
return len;
}
int RawSerial::vprintf(const char *format, std::va_list arg)
{
lock();
// ARMCC microlib does not properly handle a size of 0.
// As a workaround supply a dummy buffer with a size of 1.
char dummy_buf[1];
@ -80,7 +87,6 @@ int RawSerial::printf(const char *format, ...)
puts(temp);
delete[] temp;
}
va_end(arg);
unlock();
return len;
}

View File

@ -25,6 +25,7 @@
#include "drivers/SerialBase.h"
#include "hal/serial_api.h"
#include "platform/NonCopyable.h"
#include <cstdarg>
namespace mbed {
/** \addtogroup drivers */
@ -89,6 +90,7 @@ public:
int puts(const char *str);
int printf(const char *format, ...) MBED_PRINTF_METHOD(1, 2);
int vprintf(const char *format, std::va_list arg);
#if !(DOXYGEN_ONLY)
protected: