diff options
author | Marco Paland <marco@paland.com> | 2019-03-25 23:10:37 +0100 |
---|---|---|
committer | Marco Paland <marco@paland.com> | 2019-03-25 23:10:37 +0100 |
commit | 637df9333d481028a97621e65c76c8df3535f49d (patch) | |
tree | 643c22e9e595f5d9cd615f7a397fe7bd17b12bcf | |
parent | 87e1c834f75249d25e426c674b65419ccfa41b20 (diff) | |
download | printf-637df9333d481028a97621e65c76c8df3535f49d.tar.gz printf-637df9333d481028a97621e65c76c8df3535f49d.tar.bz2 printf-637df9333d481028a97621e65c76c8df3535f49d.zip |
feat(printf): added vprintf() support
Closes #43
-rw-r--r-- | printf.c | 7 | ||||
-rw-r--r-- | printf.h | 13 | ||||
-rw-r--r-- | test/test_suite.cpp | 18 |
3 files changed, 37 insertions, 1 deletions
@@ -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);
@@ -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
*/
@@ -87,6 +88,16 @@ 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
* \param out An output function which takes one character and an argument pointer
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];
|