From 24c460b977c014076821a36b2dae574893cebb85 Mon Sep 17 00:00:00 2001 From: Marco Paland Date: Tue, 15 May 2018 12:14:51 +0200 Subject: feat(printf): added new oprintf() function Write formatted output directly to given output function --- printf.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'printf.c') diff --git a/printf.c b/printf.c index f1a51e2..0b94d4a 100644 --- a/printf.c +++ b/printf.c @@ -101,6 +101,14 @@ static inline void _out_char(char character, char* buffer, size_t idx, size_t ma } +// internal output function wrapper +static inline void _out_fct(char character, char* buffer, size_t idx, size_t maxlen) +{ + (void)idx; (void)maxlen; + ((void (*)(char character))buffer)(character); // buffer is the output fct pointer +} + + // internal strlen // \return The length of the string (excluding the terminating 0) static inline unsigned int _strlen(const char* str) @@ -674,7 +682,17 @@ int snprintf(char* buffer, size_t count, const char* format, ...) } -inline int vsnprintf(char* buffer, size_t count, const char* format, va_list va) +int vsnprintf(char* buffer, size_t count, const char* format, va_list va) { return _vsnprintf(_out_buffer, buffer, count, format, va); } + + +int oprintf(void (*out)(char character), const char* format, ...) +{ + va_list va; + va_start(va, format); + const int ret = _vsnprintf(_out_fct, (char*)out, (size_t)-1, format, va); + va_end(va); + return ret; +} -- cgit v1.2.3