aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Paland <marco@paland.com>2019-03-25 23:10:37 +0100
committerMarco Paland <marco@paland.com>2019-03-25 23:10:37 +0100
commit637df9333d481028a97621e65c76c8df3535f49d (patch)
tree643c22e9e595f5d9cd615f7a397fe7bd17b12bcf
parent87e1c834f75249d25e426c674b65419ccfa41b20 (diff)
downloadprintf-637df9333d481028a97621e65c76c8df3535f49d.tar.gz
printf-637df9333d481028a97621e65c76c8df3535f49d.tar.bz2
printf-637df9333d481028a97621e65c76c8df3535f49d.zip
feat(printf): added vprintf() support
Closes #43
-rw-r--r--printf.c7
-rw-r--r--printf.h13
-rw-r--r--test/test_suite.cpp18
3 files changed, 37 insertions, 1 deletions
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
*/
@@ -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];