From: Thomas Weißschuh Date: Fri, 11 Apr 2025 09:00:47 +0000 (+0200) Subject: tools/nolibc: add dprintf() and vdprintf() X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=5197b7b87cbfeed61b69ff54532bb58a0d55cb0b;p=users%2Fdwmw2%2Flinux.git tools/nolibc: add dprintf() and vdprintf() dprintf() and vdprintf() are printf() variants printing directly into a filedescriptor. As FILE in nolibc is based directly on filedescriptors, the implementation is trivial. Signed-off-by: Thomas Weißschuh Acked-by: Willy Tarreau --- diff --git a/tools/include/nolibc/stdio.h b/tools/include/nolibc/stdio.h index b32b8b7940152..262d0da4da906 100644 --- a/tools/include/nolibc/stdio.h +++ b/tools/include/nolibc/stdio.h @@ -351,6 +351,30 @@ int printf(const char *fmt, ...) return ret; } +static __attribute__((unused, format(printf, 2, 0))) +int vdprintf(int fd, const char *fmt, va_list args) +{ + FILE *stream; + + stream = fdopen(fd, NULL); + if (!stream) + return -1; + /* Technically 'stream' is leaked, but as it's only a wrapper around 'fd' that is fine */ + return vfprintf(stream, fmt, args); +} + +static __attribute__((unused, format(printf, 2, 3))) +int dprintf(int fd, const char *fmt, ...) +{ + va_list args; + int ret; + + va_start(args, fmt); + ret = vdprintf(fd, fmt, args); + va_end(args); + return ret; +} + static __attribute__((unused)) int vsscanf(const char *str, const char *format, va_list args) {