2 * This file is part of Cmarsh
3 * Copyright (C) 2004 Richard Kettlewell
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
24 void (*exiter
)(int) = exit
;
28 static void verror(const char *prefix_
,
29 int errno_value
, const char *msg
, va_list ap
) {
30 fprintf(stderr
, "%s: ", prefix_
);
31 vfprintf(stderr
, msg
, ap
);
33 fprintf(stderr
, ": %s\n", strerror(errno_value
));
38 void fatal(int errno_value
, const char *msg
, ...) {
42 verror("FATAL", errno_value
, msg
, ap
);
46 void error(int errno_value
, const char *msg
, ...) {
50 verror("ERROR", errno_value
, msg
, ap
);
54 void inputerror(const struct location
*l
,
55 const char *msg
, ...) {
59 if(fprintf(stderr
, "%s:%d: error: ",
60 l ? l
->path
: path
, l ? l
->line
: line
) < 0)
63 if(vfprintf(stderr
, msg
, ap
) < 0) exit(-1);
65 if(fputc('\n', stderr
) < 0) exit(-1);
70 void inputwarning(const struct location
*l
,
71 enum warning_category
attribute((unused
)) cat
,
72 const char *msg
, ...) {
74 /* XXX implement warning categories */
77 if(fprintf(stderr
, "%s:%d: warning: ",
78 l ? l
->path
: path
, l ? l
->line
: line
) < 0)
81 if(vfprintf(stderr
, msg
, ap
) < 0) exit(-1);
83 if(fputc('\n', stderr
) < 0) exit(-1);
87 int yyerror(const char *msg
) {
88 inputerror(0, "%s", msg
);
92 void suppress_errors(void) {
96 void restore_errors(void) {