Mercurial > hg > octave-nkf > gnulib-hg
annotate lib/error.c @ 4020:7158a1db8695
change license to gpl.
author | Karl Berry <karl@freefriends.org> |
---|---|
date | Mon, 25 Nov 2002 00:17:33 +0000 |
parents | 6f613df1e6f0 |
children | 925594d77a99 |
rev | line source |
---|---|
1268 | 1 /* Error handler for noninteractive utilities |
4009
6f613df1e6f0
Add copyright date of 2002.
Jim Meyering <jim@meyering.net>
parents:
3966
diff
changeset
|
2 Copyright (C) 1990-1998, 2000, 2001, 2002 Free Software Foundation, Inc. |
4020 | 3 This program is free software; you can redistribute it and/or modify |
4 it under the terms of the GNU General Public License as published by | |
5 the Free Software Foundation; either version 2, or (at your option) | |
6 any later version. | |
9 | 7 |
4020 | 8 This program is distributed in the hope that it will be useful, |
724
3f555c6de1b9
Use #if, not #ifdef in test for HAVE_CONFIG_H.
Jim Meyering <jim@meyering.net>
parents:
719
diff
changeset
|
9 but WITHOUT ANY WARRANTY; without even the implied warranty of |
4020 | 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 GNU General Public License for more details. | |
572 | 12 |
4020 | 13 You should have received a copy of the GNU General Public License along |
14 with this program; if not, write to the Free Software Foundation, | |
15 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |
9 | 16 |
398 | 17 /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ |
18 | |
1268 | 19 #ifdef HAVE_CONFIG_H |
1289 | 20 # include <config.h> |
398 | 21 #endif |
9 | 22 |
23 #include <stdio.h> | |
3966
22d3032f0239
Include gettext.h instead of <libintl.h> with #ifdefs.
Bruno Haible <bruno@clisp.org>
parents:
3618
diff
changeset
|
24 |
22d3032f0239
Include gettext.h instead of <libintl.h> with #ifdefs.
Bruno Haible <bruno@clisp.org>
parents:
3618
diff
changeset
|
25 #ifdef _LIBC |
2984
5b1fa2113060
Add a couple #includes, merging from GNU libc version.
Jim Meyering <jim@meyering.net>
parents:
2643
diff
changeset
|
26 # include <libintl.h> |
3966
22d3032f0239
Include gettext.h instead of <libintl.h> with #ifdefs.
Bruno Haible <bruno@clisp.org>
parents:
3618
diff
changeset
|
27 #else |
22d3032f0239
Include gettext.h instead of <libintl.h> with #ifdefs.
Bruno Haible <bruno@clisp.org>
parents:
3618
diff
changeset
|
28 # include "gettext.h" |
2984
5b1fa2113060
Add a couple #includes, merging from GNU libc version.
Jim Meyering <jim@meyering.net>
parents:
2643
diff
changeset
|
29 #endif |
3966
22d3032f0239
Include gettext.h instead of <libintl.h> with #ifdefs.
Bruno Haible <bruno@clisp.org>
parents:
3618
diff
changeset
|
30 #define _(msgid) gettext (msgid) |
22d3032f0239
Include gettext.h instead of <libintl.h> with #ifdefs.
Bruno Haible <bruno@clisp.org>
parents:
3618
diff
changeset
|
31 |
3446 | 32 #ifdef _LIBC |
33 # include <wchar.h> | |
34 # define mbsrtowcs __mbsrtowcs | |
35 #endif | |
9 | 36 |
527 | 37 #if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC |
398 | 38 # if __STDC__ |
39 # include <stdarg.h> | |
40 # define VA_START(args, lastarg) va_start(args, lastarg) | |
41 # else | |
42 # include <varargs.h> | |
43 # define VA_START(args, lastarg) va_start(args) | |
44 # endif | |
45 #else | |
46 # define va_alist a1, a2, a3, a4, a5, a6, a7, a8 | |
47 # define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8; | |
48 #endif | |
9 | 49 |
527 | 50 #if STDC_HEADERS || _LIBC |
398 | 51 # include <stdlib.h> |
52 # include <string.h> | |
53 #else | |
54 void exit (); | |
55 #endif | |
9 | 56 |
1268 | 57 #include "error.h" |
3618 | 58 #include "unlocked-io.h" |
1268 | 59 |
398 | 60 /* If NULL, error will flush stdout, then print on stderr the program |
61 name, a colon and a space. Otherwise, error will call this | |
62 function without parameters instead. */ | |
572 | 63 void (*error_print_progname) ( |
64 #if __STDC__ - 0 | |
65 void | |
66 #endif | |
67 ); | |
68 | |
69 /* This variable is incremented each time `error' is called. */ | |
70 unsigned int error_message_count; | |
9 | 71 |
527 | 72 #ifdef _LIBC |
572 | 73 /* In the GNU C library, there is a predefined variable for this. */ |
74 | |
1289 | 75 # define program_name program_invocation_name |
76 # include <errno.h> | |
572 | 77 |
1268 | 78 /* In GNU libc we want do not want to use the common name `error' directly. |
79 Instead make it a weak alias. */ | |
3446 | 80 extern void __error (int status, int errnum, const char *message, ...) |
81 __attribute__ ((__format__ (__printf__, 3, 4))); | |
82 extern void __error_at_line (int status, int errnum, const char *file_name, | |
83 unsigned int line_number, const char *message, | |
84 ...) | |
85 __attribute__ ((__format__ (__printf__, 5, 6)));; | |
1289 | 86 # define error __error |
87 # define error_at_line __error_at_line | |
1268 | 88 |
2984
5b1fa2113060
Add a couple #includes, merging from GNU libc version.
Jim Meyering <jim@meyering.net>
parents:
2643
diff
changeset
|
89 # ifdef USE_IN_LIBIO |
5b1fa2113060
Add a couple #includes, merging from GNU libc version.
Jim Meyering <jim@meyering.net>
parents:
2643
diff
changeset
|
90 # include <libio/iolibio.h> |
5b1fa2113060
Add a couple #includes, merging from GNU libc version.
Jim Meyering <jim@meyering.net>
parents:
2643
diff
changeset
|
91 # define fflush(s) _IO_fflush (s) |
5b1fa2113060
Add a couple #includes, merging from GNU libc version.
Jim Meyering <jim@meyering.net>
parents:
2643
diff
changeset
|
92 # endif |
5b1fa2113060
Add a couple #includes, merging from GNU libc version.
Jim Meyering <jim@meyering.net>
parents:
2643
diff
changeset
|
93 |
1289 | 94 #else /* not _LIBC */ |
527 | 95 |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
96 # if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
97 # ifndef HAVE_DECL_STRERROR_R |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
98 "this configure-time declaration test was not run" |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
99 # endif |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
100 char *strerror_r (); |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
101 # endif |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
102 |
398 | 103 /* The calling program should define program_name and set it to the |
104 name of the executing program. */ | |
105 extern char *program_name; | |
9 | 106 |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
107 # if HAVE_STRERROR_R || defined strerror_r |
1289 | 108 # define __strerror_r strerror_r |
109 # else | |
110 # if HAVE_STRERROR | |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
111 # ifndef HAVE_DECL_STRERROR |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
112 "this configure-time declaration test was not run" |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
113 # endif |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
114 # if !HAVE_DECL_STRERROR |
398 | 115 char *strerror (); |
1289 | 116 # endif |
117 # else | |
9 | 118 static char * |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
119 private_strerror (int errnum) |
9 | 120 { |
121 extern char *sys_errlist[]; | |
122 extern int sys_nerr; | |
123 | |
124 if (errnum > 0 && errnum <= sys_nerr) | |
1268 | 125 return _(sys_errlist[errnum]); |
572 | 126 return _("Unknown system error"); |
9 | 127 } |
1289 | 128 # define strerror private_strerror |
129 # endif /* HAVE_STRERROR */ | |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
130 # endif /* HAVE_STRERROR_R || defined strerror_r */ |
1289 | 131 #endif /* not _LIBC */ |
9 | 132 |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
133 static void |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
134 print_errno_message (int errnum) |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
135 { |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
136 char const *s; |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
137 |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
138 #if defined HAVE_STRERROR_R || _LIBC |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
139 char errbuf[1024]; |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
140 # if STRERROR_R_CHAR_P || _LIBC |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
141 s = __strerror_r (errnum, errbuf, sizeof errbuf); |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
142 # else |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
143 if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
144 s = errbuf; |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
145 else |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
146 s = 0; |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
147 # endif |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
148 #else |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
149 s = strerror (errnum); |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
150 #endif |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
151 |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
152 #if !_LIBC |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
153 if (! s) |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
154 s = _("Unknown system error"); |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
155 #endif |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
156 |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
157 #if _LIBC && USE_IN_LIBIO |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
158 if (_IO_fwide (stderr, 0) > 0) |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
159 { |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
160 __fwprintf (stderr, L": %s", s); |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
161 return; |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
162 } |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
163 #endif |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
164 |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
165 fprintf (stderr, ": %s", s); |
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
166 } |
3446 | 167 |
168 #ifdef VA_START | |
169 static void | |
170 error_tail (int status, int errnum, const char *message, va_list args) | |
171 { | |
172 # if HAVE_VPRINTF || _LIBC | |
173 # if _LIBC && USE_IN_LIBIO | |
174 if (_IO_fwide (stderr, 0) > 0) | |
175 { | |
176 # define ALLOCA_LIMIT 2000 | |
177 size_t len = strlen (message) + 1; | |
178 wchar_t *wmessage = NULL; | |
179 mbstate_t st; | |
180 size_t res; | |
181 const char *tmp; | |
182 | |
183 do | |
184 { | |
185 if (len < ALLOCA_LIMIT) | |
186 wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); | |
187 else | |
188 { | |
189 if (wmessage != NULL && len / 2 < ALLOCA_LIMIT) | |
190 wmessage = NULL; | |
191 | |
192 wmessage = (wchar_t *) realloc (wmessage, | |
193 len * sizeof (wchar_t)); | |
194 | |
195 if (wmessage == NULL) | |
196 { | |
197 fputws_unlocked (L"out of memory\n", stderr); | |
198 return; | |
199 } | |
200 } | |
201 | |
202 memset (&st, '\0', sizeof (st)); | |
203 tmp =message; | |
204 } | |
205 while ((res = mbsrtowcs (wmessage, &tmp, len, &st)) == len); | |
206 | |
207 if (res == (size_t) -1) | |
208 /* The string cannot be converted. */ | |
209 wmessage = (wchar_t *) L"???"; | |
210 | |
211 __vfwprintf (stderr, wmessage, args); | |
212 } | |
213 else | |
214 # endif | |
215 vfprintf (stderr, message, args); | |
216 # else | |
217 _doprnt (message, args, stderr); | |
218 # endif | |
219 va_end (args); | |
220 | |
221 ++error_message_count; | |
222 if (errnum) | |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
223 print_errno_message (errnum); |
3446 | 224 # if _LIBC && USE_IN_LIBIO |
225 if (_IO_fwide (stderr, 0) > 0) | |
226 putwc (L'\n', stderr); | |
227 else | |
228 # endif | |
229 putc ('\n', stderr); | |
230 fflush (stderr); | |
231 if (status) | |
232 exit (status); | |
233 } | |
234 #endif | |
235 | |
236 | |
9 | 237 /* Print the program name and error message MESSAGE, which is a printf-style |
238 format string with optional args. | |
239 If ERRNUM is nonzero, print its corresponding system error message. | |
240 Exit with status STATUS if it is nonzero. */ | |
241 /* VARARGS */ | |
242 void | |
1289 | 243 #if defined VA_START && __STDC__ |
398 | 244 error (int status, int errnum, const char *message, ...) |
245 #else | |
9 | 246 error (status, errnum, message, va_alist) |
247 int status; | |
248 int errnum; | |
249 char *message; | |
250 va_dcl | |
398 | 251 #endif |
9 | 252 { |
398 | 253 #ifdef VA_START |
9 | 254 va_list args; |
398 | 255 #endif |
9 | 256 |
3446 | 257 fflush (stdout); |
258 #ifdef _LIBC | |
259 # ifdef USE_IN_LIBIO | |
260 _IO_flockfile (stderr); | |
261 # else | |
262 __flockfile (stderr); | |
263 # endif | |
264 #endif | |
398 | 265 if (error_print_progname) |
266 (*error_print_progname) (); | |
267 else | |
268 { | |
3446 | 269 #if _LIBC && USE_IN_LIBIO |
270 if (_IO_fwide (stderr, 0) > 0) | |
271 __fwprintf (stderr, L"%s: ", program_name); | |
272 else | |
273 #endif | |
274 fprintf (stderr, "%s: ", program_name); | |
398 | 275 } |
276 | |
277 #ifdef VA_START | |
9 | 278 VA_START (args, message); |
3446 | 279 error_tail (status, errnum, message, args); |
398 | 280 #else |
9 | 281 fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8); |
398 | 282 |
440 | 283 ++error_message_count; |
9 | 284 if (errnum) |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
285 print_errno_message (errnum); |
9 | 286 putc ('\n', stderr); |
287 fflush (stderr); | |
288 if (status) | |
289 exit (status); | |
3446 | 290 #endif |
291 | |
292 #ifdef _LIBC | |
293 # ifdef USE_IN_LIBIO | |
294 _IO_funlockfile (stderr); | |
295 # else | |
296 __funlockfile (stderr); | |
297 # endif | |
298 #endif | |
9 | 299 } |
572 | 300 |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
301 /* Sometimes we want to have at most one error per line. This |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
302 variable controls whether this mode is selected or not. */ |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
303 int error_one_per_line; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
304 |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
305 void |
1289 | 306 #if defined VA_START && __STDC__ |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
307 error_at_line (int status, int errnum, const char *file_name, |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
308 unsigned int line_number, const char *message, ...) |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
309 #else |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
310 error_at_line (status, errnum, file_name, line_number, message, va_alist) |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
311 int status; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
312 int errnum; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
313 const char *file_name; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
314 unsigned int line_number; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
315 char *message; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
316 va_dcl |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
317 #endif |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
318 { |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
319 #ifdef VA_START |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
320 va_list args; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
321 #endif |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
322 |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
323 if (error_one_per_line) |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
324 { |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
325 static const char *old_file_name; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
326 static unsigned int old_line_number; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
327 |
3446 | 328 if (old_line_number == line_number |
329 && (file_name == old_file_name | |
330 || strcmp (old_file_name, file_name) == 0)) | |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
331 /* Simply return and print nothing. */ |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
332 return; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
333 |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
334 old_file_name = file_name; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
335 old_line_number = line_number; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
336 } |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
337 |
3446 | 338 fflush (stdout); |
339 #ifdef _LIBC | |
340 # ifdef USE_IN_LIBIO | |
341 _IO_flockfile (stderr); | |
342 # else | |
343 __flockfile (stderr); | |
344 # endif | |
345 #endif | |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
346 if (error_print_progname) |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
347 (*error_print_progname) (); |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
348 else |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
349 { |
3446 | 350 #if _LIBC && USE_IN_LIBIO |
351 if (_IO_fwide (stderr, 0) > 0) | |
352 __fwprintf (stderr, L"%s: ", program_name); | |
353 else | |
354 #endif | |
355 fprintf (stderr, "%s:", program_name); | |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
356 } |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
357 |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
358 if (file_name != NULL) |
3446 | 359 { |
360 #if _LIBC && USE_IN_LIBIO | |
361 if (_IO_fwide (stderr, 0) > 0) | |
362 __fwprintf (stderr, L"%s:%d: ", file_name, line_number); | |
363 else | |
364 #endif | |
365 fprintf (stderr, "%s:%d: ", file_name, line_number); | |
366 } | |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
367 |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
368 #ifdef VA_START |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
369 VA_START (args, message); |
3446 | 370 error_tail (status, errnum, message, args); |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
371 #else |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
372 fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8); |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
373 |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
374 ++error_message_count; |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
375 if (errnum) |
3550
c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Jim Meyering <jim@meyering.net>
parents:
3446
diff
changeset
|
376 print_errno_message (errnum); |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
377 putc ('\n', stderr); |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
378 fflush (stderr); |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
379 if (status) |
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
380 exit (status); |
3446 | 381 #endif |
382 | |
383 #ifdef _LIBC | |
384 # ifdef USE_IN_LIBIO | |
385 _IO_funlockfile (stderr); | |
386 # else | |
387 __funlockfile (stderr); | |
388 # endif | |
389 #endif | |
573
8a90f3b04017
update from FSF:/home/gd/gnu/lib
Jim Meyering <jim@meyering.net>
parents:
572
diff
changeset
|
390 } |
1268 | 391 |
392 #ifdef _LIBC | |
393 /* Make the weak alias. */ | |
1289 | 394 # undef error |
395 # undef error_at_line | |
1268 | 396 weak_alias (__error, error) |
397 weak_alias (__error_at_line, error_at_line) | |
398 #endif |