Line data Source code
1 : /* printf wrappers that fail immediately for non-file-related errors
2 : Copyright (C) 2007 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. */
31 : int
32 45 : xprintf (char const *restrict format, ...)
33 : {
34 : va_list args;
35 : int retval;
36 45 : va_start (args, format);
37 45 : retval = xvprintf (format, args);
38 45 : va_end (args);
39 :
40 45 : return retval;
41 : }
42 :
43 : /* Just like vprintf, but call error if it fails without setting the
44 : stream's error indicator. */
45 : int
46 45 : xvprintf (char const *restrict format, va_list args)
47 : {
48 45 : int retval = vprintf (format, args);
49 45 : if (retval < 0 && ! ferror (stdout))
50 0 : error (exit_failure, errno, gettext ("cannot perform formatted output"));
51 :
52 45 : return retval;
53 : }
54 :
55 : /* Just like fprintf, but call error if it fails without setting the
56 : stream's error indicator. */
57 : int
58 0 : xfprintf (FILE *restrict stream, char const *restrict format, ...)
59 : {
60 : va_list args;
61 : int retval;
62 0 : va_start (args, format);
63 0 : retval = xvfprintf (stream, format, args);
64 0 : va_end (args);
65 :
66 0 : return retval;
67 : }
68 :
69 : /* Just like vfprintf, but call error if it fails without setting the
70 : stream's error indicator. */
71 : int
72 0 : xvfprintf (FILE *restrict stream, char const *restrict format, va_list args)
73 : {
74 0 : int retval = vfprintf (stream, format, args);
75 0 : if (retval < 0 && ! ferror (stream))
76 0 : error (exit_failure, errno, gettext ("cannot perform formatted output"));
77 :
78 0 : return retval;
79 : }
|