chiark / gitweb /
Import upstream sources.
[cparse] / log.c
CommitLineData
3cd4b0f8
MW
1/*
2 * This file is part of Cmarsh
3 * Copyright (C) 2004 Richard Kettlewell
4 *
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.
9 *
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.
14 *
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
18 * USA
19 */
20
21#include "cparse.h"
22#include <stdarg.h>
23
24void (*exiter)(int) = exit;
25
26static int suppress;
27
28static 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);
32 if(errno_value)
33 fprintf(stderr, ": %s\n", strerror(errno_value));
34 else
35 fputc('\n', stderr);
36}
37
38void fatal(int errno_value, const char *msg, ...) {
39 va_list ap;
40
41 va_start(ap, msg);
42 verror("FATAL", errno_value, msg, ap);
43 exit(1);
44}
45
46void error(int errno_value, const char *msg, ...) {
47 va_list ap;
48
49 va_start(ap, msg);
50 verror("ERROR", errno_value, msg, ap);
51 va_end(ap);
52}
53
54void inputerror(const struct location *l,
55 const char *msg, ...) {
56 if(!suppress) {
57 va_list ap;
58
59 if(fprintf(stderr, "%s:%d: error: ",
60 l ? l->path : path, l ? l->line : line) < 0)
61 exit(-1);
62 va_start(ap, msg);
63 if(vfprintf(stderr, msg, ap) < 0) exit(-1);
64 va_end(ap);
65 if(fputc('\n', stderr) < 0) exit(-1);
66 ++errors;
67 }
68}
69
70void inputwarning(const struct location *l,
71 enum warning_category attribute((unused)) cat,
72 const char *msg, ...) {
73 if(!suppress) {
74 /* XXX implement warning categories */
75 va_list ap;
76
77 if(fprintf(stderr, "%s:%d: warning: ",
78 l ? l->path : path, l ? l->line : line) < 0)
79 exit(-1);
80 va_start(ap, msg);
81 if(vfprintf(stderr, msg, ap) < 0) exit(-1);
82 va_end(ap);
83 if(fputc('\n', stderr) < 0) exit(-1);
84 }
85}
86
87int yyerror(const char *msg) {
88 inputerror(0, "%s", msg);
89 return 0;
90}
91
92void suppress_errors(void) {
93 ++suppress;
94}
95
96void restore_errors(void) {
97 --suppress;
98}
99
100/*
101Local Variables:
102c-basic-offset:2
103comment-column:40
104End:
105*/