From 637df9333d481028a97621e65c76c8df3535f49d Mon Sep 17 00:00:00 2001 From: Marco Paland Date: Mon, 25 Mar 2019 23:10:37 +0100 Subject: feat(printf): added vprintf() support Closes #43 --- printf.c | 7 +++++++ printf.h | 13 ++++++++++++- test/test_suite.cpp | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/printf.c b/printf.c index c9cebfc..cb956bc 100644 --- a/printf.c +++ b/printf.c @@ -884,6 +884,13 @@ int snprintf_(char* buffer, size_t count, const char* format, ...) } +int vprintf_(const char* format, va_list va) +{ + char buffer[1]; + return _vsnprintf(_out_char, buffer, (size_t)-1, format, va); +} + + int vsnprintf_(char* buffer, size_t count, const char* format, va_list va) { return _vsnprintf(_out_buffer, buffer, count, format, va); diff --git a/printf.h b/printf.h index 6a9339e..6075bc2 100644 --- a/printf.h +++ b/printf.h @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // \author (c) Marco Paland (info@paland.com) -// 2014-2018, PALANDesign Hannover, Germany +// 2014-2019, PALANDesign Hannover, Germany // // \license The MIT License (MIT) // @@ -77,6 +77,7 @@ int sprintf_(char* buffer, const char* format, ...); * \param buffer A pointer to the buffer where to store the formatted string * \param count The maximum number of characters to store in the buffer, including a terminating null character * \param format A string that specifies the format of the output + * \param va A value identifying a variable arguments list * \return The number of characters that are WRITTEN into the buffer, not counting the terminating null character * If the formatted string is truncated the buffer size (count) is returned */ @@ -86,6 +87,16 @@ int snprintf_(char* buffer, size_t count, const char* format, ...); int vsnprintf_(char* buffer, size_t count, const char* format, va_list va); +/** + * Tiny vprintf implementation + * \param format A string that specifies the format of the output + * \param va A value identifying a variable arguments list + * \return The number of characters that are WRITTEN into the buffer, not counting the terminating null character + */ +#define vprintf vprintf_ +int vprintf_(const char* format, va_list va); + + /** * printf with output function * You may use this as dynamic alternative to printf() with its fixed _putchar() output diff --git a/test/test_suite.cpp b/test/test_suite.cpp index d76a07d..dc15321 100644 --- a/test/test_suite.cpp +++ b/test/test_suite.cpp @@ -85,6 +85,13 @@ TEST_CASE("snprintf", "[]" ) { REQUIRE(!strcmp(buffer, "-1")); } +static void vprintf_builder_1(char* buffer, ...) +{ + va_list args; + va_start(args, buffer); + test::vprintf("%d", args); + va_end(args); +} static void vsnprintf_builder_1(char* buffer, ...) { @@ -103,6 +110,17 @@ static void vsnprintf_builder_3(char* buffer, ...) } +TEST_CASE("vprintf", "[]" ) { + char buffer[100]; + printf_idx = 0U; + memset(printf_buffer, 0xCC, 100U); + vprintf_builder_1(buffer, 2345); + REQUIRE(printf_buffer[4] == (char)0xCC); + printf_buffer[4] = 0; + REQUIRE(!strcmp(printf_buffer, "2345")); +} + + TEST_CASE("vsnprintf", "[]" ) { char buffer[100]; -- cgit v1.2.3