From 7c0971900b114a82fc362b5178ec9a4a2865dbbf Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 22 Oct 2007 14:09:16 -0600 Subject: [PATCH] Also wrap vf?printf. * lib/xprintf.h (xvprintf, xvfprintf): New declarations. * lib/xprintf.c (xprintf, xfprintf): Work for C89. (xvprintf, xvfprintf): New functions. Signed-off-by: Eric Blake --- ChangeLog | 7 +++++++ lib/xprintf.c | 27 ++++++++++++++++++++++++--- lib/xprintf.h | 6 ++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index b14bd159db..1f17dbd091 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-10-22 Eric Blake + + Also wrap vf?printf. + * lib/xprintf.h (xvprintf, xvfprintf): New declarations. + * lib/xprintf.c (xprintf, xfprintf): Work for C89. + (xvprintf, xvfprintf): New functions. + 2007-10-22 Ralf Wildenhues * modules/fstrcmp-tests (test_fstrcmp_LDADD): New, add diff --git a/lib/xprintf.c b/lib/xprintf.c index b3940ad49d..7738cc4ee3 100644 --- a/lib/xprintf.c +++ b/lib/xprintf.c @@ -19,7 +19,6 @@ #include "xprintf.h" #include -#include #include "error.h" #include "exitfail.h" @@ -33,11 +32,22 @@ int xprintf (char const *restrict format, ...) { va_list args; + int err; va_start (args, format); + err = xvprintf (format, args); + va_end (args); + + return err; +} + +/* Just like vprintf, but call error if it fails without setting + the error indicator. */ +int +xvprintf (char const *restrict format, va_list args) +{ int err = vprintf (format, args); if (err < 0 && ! ferror (stdout)) error (exit_failure, errno, gettext ("cannot perform formatted output")); - va_end (args); return err; } @@ -48,11 +58,22 @@ int xfprintf (FILE *restrict stream, char const *restrict format, ...) { va_list args; + int err; va_start (args, format); + err = xvfprintf (stream, format, args); + va_end (args); + + return err; +} + +/* Just like vfprintf, but call error if it fails without setting + the error indicator. */ +int +xvfprintf (FILE *restrict stream, char const *restrict format, va_list args) +{ int err = vfprintf (stream, format, args); if (err < 0 && ! ferror (stream)) error (exit_failure, errno, gettext ("cannot perform formatted output")); - va_end (args); return err; } diff --git a/lib/xprintf.h b/lib/xprintf.h index 4c0870cfe8..5340aa3b2b 100644 --- a/lib/xprintf.h +++ b/lib/xprintf.h @@ -17,6 +17,7 @@ #ifndef _XPRINTF_H #define _XPRINTF_H +#include #include #ifndef __attribute__ @@ -34,7 +35,12 @@ extern int xprintf (char const *restrict format, ...) __attribute__ ((__format__ (__printf__, 1, 2))); +extern int xvprintf (char const *restrict format, va_list args) + __attribute__ ((__format__ (__printf__, 1, 0))); extern int xfprintf (FILE *restrict stream, char const *restrict format, ...) __attribute__ ((__format__ (__printf__, 2, 3))); +extern int xvfprintf (FILE *restrict stream, char const *restrict format, + va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); #endif -- 2.30.2