From 6e496e80d1860d6f76b0b69f59c520fa74eebf80 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Mon, 22 Nov 2021 15:51:08 -0600 Subject: [PATCH] Redirection support for vprintf() --- modules/libcom/src/osi/epicsStdio.c | 5 +++++ modules/libcom/src/osi/epicsStdio.h | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/modules/libcom/src/osi/epicsStdio.c b/modules/libcom/src/osi/epicsStdio.c index dca0b52cc..082609a14 100644 --- a/modules/libcom/src/osi/epicsStdio.c +++ b/modules/libcom/src/osi/epicsStdio.c @@ -118,6 +118,11 @@ int epicsStdCall epicsStdoutPrintf(const char *pFormat, ...) return nchar; } +int epicsStdCall epicsStdoutVPrintf(const char *pformat, va_list ap) +{ + return vfprintf(epicsGetStdout(), pformat, ap); +} + int epicsStdCall epicsStdoutPuts(const char *str) { return fprintf(epicsGetStdout(), "%s\n", str); diff --git a/modules/libcom/src/osi/epicsStdio.h b/modules/libcom/src/osi/epicsStdio.h index 97afa3405..29a24942b 100644 --- a/modules/libcom/src/osi/epicsStdio.h +++ b/modules/libcom/src/osi/epicsStdio.h @@ -36,6 +36,7 @@ * - `printf` becomes epicsStdoutPrintf() * - `puts` becomes epicsStdoutPuts() * - `putchar` becomes epicsStdoutPutchar() + * - `vprintf` becomes epicsStdoutVPrintf() * * The epicsSetThreadStdin(), epicsSetThreadStdout() and epicsSetThreadStderr() * routines allow the standard file streams to be redirected on a per thread @@ -75,6 +76,11 @@ extern "C" { # endif # define printf epicsStdoutPrintf +# ifdef vprintf +# undef vprintf +# endif +# define vprintf epicsStdoutVPrintf + # ifdef puts # undef puts # endif @@ -172,6 +178,8 @@ LIBCOM_API void epicsStdCall epicsSetThreadStderr(FILE *); LIBCOM_API int epicsStdCall epicsStdoutPrintf( const char *pformat, ...) EPICS_PRINTF_STYLE(1,2); +LIBCOM_API int epicsStdCall epicsStdoutVPrintf( + const char *pformat, va_list ap); LIBCOM_API int epicsStdCall epicsStdoutPuts(const char *str); LIBCOM_API int epicsStdCall epicsStdoutPutchar(int c); @@ -185,6 +193,7 @@ using ::epicsGetStdin; using ::epicsGetStdout; using ::epicsGetStderr; using ::epicsStdoutPrintf; +using ::epicsStdoutVPrintf; using ::epicsStdoutPuts; using ::epicsStdoutPutchar; }