Mercurial > gnulib
changeset 29089:508a3b2e4039
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 <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Mon, 22 Oct 2007 14:09:16 -0600 |
parents | ba3d3d347c3a |
children | 4d6c2585cdc3 |
files | ChangeLog lib/xprintf.c lib/xprintf.h |
diffstat | 3 files changed, 39 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Mon Oct 22 23:50:32 2007 +0200 +++ b/ChangeLog Mon Oct 22 14:09:16 2007 -0600 @@ -1,3 +1,10 @@ +2007-10-22 Eric Blake <ebb9@byu.net> + + 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 <Ralf.Wildenhues@gmx.de> * modules/fstrcmp-tests (test_fstrcmp_LDADD): New, add
--- a/lib/xprintf.c Mon Oct 22 23:50:32 2007 +0200 +++ b/lib/xprintf.c Mon Oct 22 14:09:16 2007 -0600 @@ -19,7 +19,6 @@ #include "xprintf.h" #include <errno.h> -#include <stdarg.h> #include "error.h" #include "exitfail.h" @@ -33,11 +32,22 @@ 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 @@ xfprintf (FILE *restrict stream, char const *restrict format, ...) { va_list args; + int err; va_start (args, format); - int err = vfprintf (stream, format, args); - if (err < 0 && ! ferror (stream)) - error (exit_failure, errno, gettext ("cannot perform formatted output")); + 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")); + + return err; +}
--- a/lib/xprintf.h Mon Oct 22 23:50:32 2007 +0200 +++ b/lib/xprintf.h Mon Oct 22 14:09:16 2007 -0600 @@ -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