diff options
author | Marco Paland <marco@paland.com> | 2018-05-08 13:01:10 +0200 |
---|---|---|
committer | Marco Paland <marco@paland.com> | 2018-05-08 13:01:10 +0200 |
commit | 824a9b35f953ab263d08dd7659aaba4efa162b4f (patch) | |
tree | 91f705bd26cedb601ea100b86148d27924cd9949 | |
parent | 33f10559d63605caedcc3491bb6398354371b09c (diff) | |
download | printf-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.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -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]
|