|
16 | 16 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
17 | 17 | */
|
18 | 18 |
|
| 19 | +#include <stdarg.h> |
19 | 20 | #include <stdlib.h>
|
20 | 21 | #include <stdio.h>
|
21 | 22 | #include <string.h>
|
@@ -235,6 +236,53 @@ size_t Print::println(const Printable& x)
|
235 | 236 | return n;
|
236 | 237 | }
|
237 | 238 |
|
| 239 | +size_t Print::printf(const char *format, ...) { |
| 240 | + va_list arg; |
| 241 | + va_start(arg, format); |
| 242 | + char temp[64]; |
| 243 | + char* buffer = temp; |
| 244 | + size_t len = vsnprintf(temp, sizeof(temp), format, arg); |
| 245 | + va_end(arg); |
| 246 | + if (len > sizeof(temp) - 1) { |
| 247 | + buffer = new char[len + 1]; |
| 248 | + if (!buffer) { |
| 249 | + return 0; |
| 250 | + } |
| 251 | + va_start(arg, format); |
| 252 | + vsnprintf(buffer, len + 1, format, arg); |
| 253 | + va_end(arg); |
| 254 | + } |
| 255 | + len = write((const uint8_t*) buffer, len); |
| 256 | + if (buffer != temp) { |
| 257 | + delete[] buffer; |
| 258 | + } |
| 259 | + return len; |
| 260 | +} |
| 261 | + |
| 262 | +// TODO - must be better way than cut-n-paste! |
| 263 | +size_t Print::printf_P(const char *format, ...) { |
| 264 | + va_list arg; |
| 265 | + va_start(arg, format); |
| 266 | + char temp[64]; |
| 267 | + char* buffer = temp; |
| 268 | + size_t len = vsnprintf(temp, sizeof(temp), format, arg); |
| 269 | + va_end(arg); |
| 270 | + if (len > sizeof(temp) - 1) { |
| 271 | + buffer = new char[len + 1]; |
| 272 | + if (!buffer) { |
| 273 | + return 0; |
| 274 | + } |
| 275 | + va_start(arg, format); |
| 276 | + vsnprintf(buffer, len + 1, format, arg); |
| 277 | + va_end(arg); |
| 278 | + } |
| 279 | + len = write((const uint8_t*) buffer, len); |
| 280 | + if (buffer != temp) { |
| 281 | + delete[] buffer; |
| 282 | + } |
| 283 | + return len; |
| 284 | +} |
| 285 | + |
238 | 286 | // Private Methods /////////////////////////////////////////////////////////////
|
239 | 287 |
|
240 | 288 | size_t Print::printNumber(unsigned long n, uint8_t base)
|
|
0 commit comments