+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
#include "xprintf.h"
#include <errno.h>
-#include <stdarg.h>
#include "error.h"
#include "exitfail.h"
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;
}
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;
}
#ifndef _XPRINTF_H
#define _XPRINTF_H
+#include <stdarg.h>
#include <stdio.h>
#ifndef __attribute__
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