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) {