1/* printf wrappers that fail immediately for non-file-related errors 2 Copyright (C) 2007, 2009-2010 Free Software Foundation, Inc. 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17#include <config.h> 18 19#include "xprintf.h" 20 21#include <errno.h> 22 23#include "error.h" 24#include "exitfail.h" 25#include "gettext.h" 26 27/* written by Jim Meyering */ 28 29/* Just like printf, but call error if it fails without setting the 30 stream's error indicator. */ 31int 32xprintf (char const *restrict format, ...) 33{ 34 va_list args; 35 int retval; 36 va_start (args, format); 37 retval = xvprintf (format, args); 38 va_end (args); 39 40 return retval; 41} 42 43/* Just like vprintf, but call error if it fails without setting the 44 stream's error indicator. */ 45int 46xvprintf (char const *restrict format, va_list args) 47{ 48 int retval = vprintf (format, args); 49 if (retval < 0 && ! ferror (stdout)) 50 error (exit_failure, errno, gettext ("cannot perform formatted output")); 51 52 return retval; 53} 54 55/* Just like fprintf, but call error if it fails without setting the 56 stream's error indicator. */ 57int 58xfprintf (FILE *restrict stream, char const *restrict format, ...) 59{ 60 va_list args; 61 int retval; 62 va_start (args, format); 63 retval = xvfprintf (stream, format, args); 64 va_end (args); 65 66 return retval; 67} 68 69/* Just like vfprintf, but call error if it fails without setting the 70 stream's error indicator. */ 71int 72xvfprintf (FILE *restrict stream, char const *restrict format, va_list args) 73{ 74 int retval = vfprintf (stream, format, args); 75 if (retval < 0 && ! ferror (stream)) 76 error (exit_failure, errno, gettext ("cannot perform formatted output")); 77 78 return retval; 79} 80