aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Paland <marco@paland.com>2019-01-16 10:44:13 +0100
committerMarco Paland <marco@paland.com>2019-01-16 10:44:13 +0100
commitc013a0e8d6bb57247074c748a05bbe7f43bdec6f (patch)
tree09e806a56f9128c913c0925ef99d8ba5fb156d19
parentd974b16eacb5bdfdbbecf15d512a68c1bc23c743 (diff)
downloadprintf-c013a0e8d6bb57247074c748a05bbe7f43bdec6f.tar.gz
printf-c013a0e8d6bb57247074c748a05bbe7f43bdec6f.tar.bz2
printf-c013a0e8d6bb57247074c748a05bbe7f43bdec6f.zip
fix(printf): fctprintf() must not append null terminator
Fixes #39, references #19
-rw-r--r--printf.c6
-rw-r--r--test/test_suite.cpp3
2 files changed, 6 insertions, 3 deletions
diff --git a/printf.c b/printf.c
index df88d3d..c9a1175 100644
--- a/printf.c
+++ b/printf.c
@@ -134,8 +134,10 @@ static inline void _out_char(char character, void* buffer, size_t idx, size_t ma
static inline void _out_fct(char character, void* buffer, size_t idx, size_t maxlen)
{
(void)idx; (void)maxlen;
- // buffer is the output fct pointer
- ((out_fct_wrap_type*)buffer)->fct(character, ((out_fct_wrap_type*)buffer)->arg);
+ if (character) {
+ // buffer is the output fct pointer
+ ((out_fct_wrap_type*)buffer)->fct(character, ((out_fct_wrap_type*)buffer)->arg);
+ }
}
diff --git a/test/test_suite.cpp b/test/test_suite.cpp
index bcddd4f..100b59f 100644
--- a/test/test_suite.cpp
+++ b/test/test_suite.cpp
@@ -69,7 +69,8 @@ TEST_CASE("fctprintf", "[]" ) {
printf_idx = 0U;
memset(printf_buffer, 0xCC, 100U);
test::fctprintf(&_out_fct, nullptr, "This is a test of %X", 0x12EFU);
- REQUIRE(!strcmp(printf_buffer, "This is a test of 12EF"));
+ REQUIRE(!strncmp(printf_buffer, "This is a test of 12EF", 22U));
+ REQUIRE(printf_buffer[22] == (char)0xCC);
}