aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Paland <marco@paland.com>2018-05-08 13:01:10 +0200
committerMarco Paland <marco@paland.com>2018-05-08 13:01:10 +0200
commit824a9b35f953ab263d08dd7659aaba4efa162b4f (patch)
tree91f705bd26cedb601ea100b86148d27924cd9949
parent33f10559d63605caedcc3491bb6398354371b09c (diff)
downloadprintf-824a9b35f953ab263d08dd7659aaba4efa162b4f.tar.gz
printf-824a9b35f953ab263d08dd7659aaba4efa162b4f.tar.bz2
printf-824a9b35f953ab263d08dd7659aaba4efa162b4f.zip
fix(printf): use null output function for nullptr buffer
Improving #11
-rw-r--r--printf.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/printf.c b/printf.c
index d373781..edc0a4e 100644
--- a/printf.c
+++ b/printf.c
@@ -70,12 +70,19 @@ typedef void (*out_fct_type)(char character, char* buffer, size_t idx, size_t ma
// internal buffer output
static inline void _out_buffer(char character, char* buffer, size_t idx, size_t maxlen)
{
- if (!!buffer && (idx < maxlen)) {
+ if (idx < maxlen) {
buffer[idx] = character;
}
}
+// internal null output
+static inline void _out_null(char character, char* buffer, size_t idx, size_t maxlen)
+{
+ (void)character; (void)buffer; (void)idx; (void)maxlen;
+}
+
+
// internal _putchar wrapper
static inline void _out_char(char character, char* buffer, size_t idx, size_t maxlen)
{
@@ -363,6 +370,11 @@ static int _vsnprintf(out_fct_type out, char* buffer, const size_t maxlen, const
unsigned int flags, width, precision, n;
size_t idx = 0U;
+ if (!buffer) {
+ // use null output function
+ out = _out_null;
+ }
+
while (*format)
{
// format specifier? %[flags][width][.precision][length]