Eric Blake <ebb9 <at> byu.net> writes: > > Jim Meyering <jim <at> meyering.net> writes: > > > > > I've just added a new module: > > > > http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=78da34d40e6a2 > > Any objection to making this module also provide xvprintf and xvfprintf? M4 > has a use of vfprintf, which would be nice to have the wrapper for.
As in the following? (Also, it fixes a C89 compiler issue). 2007-10-22 Eric Blake <[EMAIL PROTECTED]> Also wrap vf?printf. * lib/xprintf.h (xvprintf, xvfprintf): New declarations. * lib/xprintf.c (xprintf, xfprintf): Work for C89. (xvprintf, xvfprintf): New functions. From: Eric Blake <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> --- ChangeLog | 7 +++++++ lib/xprintf.c | 27 ++++++++++++++++++++++++--- lib/xprintf.h | 6 ++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index c15c015..8fceeda 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-10-22 Eric Blake <[EMAIL PROTECTED]> + + 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 Bruno Haible <[EMAIL PROTECTED]> * m4/ulonglong.m4 (AC_TYPE_UNSIGNED_LONG_LONG_INT): Use -1ull, not diff --git a/lib/xprintf.c b/lib/xprintf.c index b3940ad..7738cc4 100644 --- a/lib/xprintf.c +++ b/lib/xprintf.c @@ -19,7 +19,6 @@ #include "xprintf.h" #include <errno.h> -#include <stdarg.h> #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 4c0870c..5340aa3 100644 --- a/lib/xprintf.h +++ b/lib/xprintf.h @@ -17,6 +17,7 @@ #ifndef _XPRINTF_H #define _XPRINTF_H +#include <stdarg.h> #include <stdio.h> #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 -- 1.5.3.2