source: vendor/gawk/3.1.5/msg.c@ 3513

Last change on this file since 3513 was 3076, checked in by bird, 18 years ago

gawk 3.1.5

File size: 3.8 KB
Line 
1/*
2 * msg.c - routines for error messages
3 */
4
5/*
6 * Copyright (C) 1986, 1988, 1989, 1991-2001, 2003 the Free Software Foundation, Inc.
7 *
8 * This file is part of GAWK, the GNU implementation of the
9 * AWK Programming Language.
10 *
11 * GAWK is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2, or (at your option)
14 * any later version.
15 *
16 * GAWK is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include "awk.h"
27
28int sourceline = 0;
29char *source = NULL;
30
31static const char *srcfile = NULL;
32static int srcline;
33
34/* err --- print an error message with source line and file and record */
35
36/* VARARGS2 */
37void
38err(const char *s, const char *emsg, va_list argp)
39{
40 char *file;
41
42 (void) fflush(stdout);
43 (void) fprintf(stderr, "%s: ", myname);
44#ifdef GAWKDEBUG
45 if (srcfile != NULL) {
46 fprintf(stderr, "%s:%d:", srcfile, srcline);
47 srcfile = NULL;
48 }
49#endif /* GAWKDEBUG */
50 if (sourceline != 0) {
51 if (source != NULL)
52 (void) fprintf(stderr, "%s:", source);
53 else
54 (void) fprintf(stderr, _("cmd. line:"));
55
56 (void) fprintf(stderr, "%d: ", sourceline);
57 }
58 if (FNR > 0) {
59 file = FILENAME_node->var_value->stptr;
60 (void) putc('(', stderr);
61 if (file)
62 (void) fprintf(stderr, "FILENAME=%s ", file);
63 (void) fprintf(stderr, "FNR=%ld) ", FNR);
64 }
65 (void) fprintf(stderr, "%s", s);
66 vfprintf(stderr, emsg, argp);
67 (void) fprintf(stderr, "\n");
68 (void) fflush(stderr);
69}
70
71/* msg --- take a varargs error message and print it */
72
73/*
74 * Function identifier purposely indented to avoid mangling
75 * by ansi2knr. Sigh.
76 */
77
78void
79#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
80 msg(const char *mesg, ...)
81#else
82/*VARARGS0*/
83 msg(va_alist)
84 va_dcl
85#endif
86{
87 va_list args;
88#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
89 va_start(args, mesg);
90#else
91 char *mesg;
92
93 va_start(args);
94 mesg = va_arg(args, char *);
95#endif
96 err("", mesg, args);
97 va_end(args);
98}
99
100/* warning --- print a warning message */
101
102void
103#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
104 warning(const char *mesg, ...)
105#else
106/*VARARGS0*/
107 warning(va_alist)
108 va_dcl
109#endif
110{
111 va_list args;
112#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
113 va_start(args, mesg);
114#else
115 char *mesg;
116
117 va_start(args);
118 mesg = va_arg(args, char *);
119#endif
120 err(_("warning: "), mesg, args);
121 va_end(args);
122}
123
124void
125#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
126 error(const char *mesg, ...)
127#else
128/*VARARGS0*/
129 error(va_alist)
130 va_dcl
131#endif
132{
133 va_list args;
134#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
135 va_start(args, mesg);
136#else
137 char *mesg;
138
139 va_start(args);
140 mesg = va_arg(args, char *);
141#endif
142 err(_("error: "), mesg, args);
143 va_end(args);
144}
145
146/* set_loc --- set location where a fatal error happened */
147
148void
149set_loc(const char *file, int line)
150{
151 srcfile = file;
152 srcline = line;
153
154 /* This stupid line keeps some compilers happy: */
155 file = srcfile; line = srcline;
156}
157
158/* fatal --- print an error message and die */
159
160void
161#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
162 r_fatal(const char *mesg, ...)
163#else
164/*VARARGS0*/
165 r_fatal(va_alist)
166 va_dcl
167#endif
168{
169 va_list args;
170#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
171 va_start(args, mesg);
172#else
173 char *mesg;
174
175 va_start(args);
176 mesg = va_arg(args, char *);
177#endif
178 err(_("fatal: "), mesg, args);
179 va_end(args);
180#ifdef GAWKDEBUG
181 abort();
182#endif
183 exit(2);
184}
Note: See TracBrowser for help on using the repository browser.