1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
/*
* routines for error messages
*
* Copyright (C) 1988 Free Software Foundation
*
* $Log: awk5.c,v $
* Revision 1.10 88/12/08 11:00:07 david
* add $Log$
*
*/
/*
* GAWK is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY. No author or distributor accepts responsibility to anyone for
* the consequences of using it or for whether it serves any particular
* purpose or works at all, unless he says so in writing. Refer to the GAWK
* General Public License for full details.
*
* Everyone is granted permission to copy, modify and redistribute GAWK, but
* only under the conditions described in the GAWK General Public License. A
* copy of this license is supposed to have been given to you along with GAWK
* so you can know your rights and responsibilities. It should be in a file
* named COPYING. Among other things, the copyright notice and this notice
* must be preserved on all copies.
*
* In other words, go ahead and share GAWK, but don't try to stop anyone else
* from sharing it farther. Help stamp out software hoarding!
*/
#include "awk.h"
int sourceline = 0;
char *source = NULL;
err(s, argp)
char *s;
va_list *argp;
{
char *fmt;
int line;
char *file;
(void) fprintf(stderr, "%s: %s ", myname, s);
fmt = va_arg(*argp, char *);
vfprintf(stderr, fmt, *argp);
(void) fprintf(stderr, "\n");
line = (int) FNR_node->var_value->numbr;
if (line)
(void) fprintf(stderr, " input line number %d", line);
file = FILENAME_node->var_value->stptr;
if (file && strcmp(file, "-") != 0)
(void) fprintf(stderr, ", file `%s'", file);
(void) fprintf(stderr, "\n");
if (sourceline)
(void) fprintf(stderr, " source line number %d", sourceline);
if (source)
(void) fprintf(stderr, ", file `%s'", source);
(void) fprintf(stderr, "\n");
}
/*VARARGS0*/
void
msg(va_alist)
va_dcl
{
va_list args;
va_start(args);
err("", &args);
va_end(args);
}
/*VARARGS0*/
void
warning(va_alist)
va_dcl
{
va_list args;
va_start(args);
err("warning:", &args);
va_end(args);
}
/*VARARGS0*/
void
fatal(va_alist)
va_dcl
{
va_list args;
extern char *sourcefile;
va_start(args);
err("fatal error:", &args);
va_end(args);
#ifdef DEBUG
abort();
#endif
exit(1);
}
char *
safe_malloc(size)
unsigned size;
{
char *ret;
ret = malloc(size);
if (ret == NULL)
fatal("safe_malloc: can't allocate memory (%s)",
sys_errlist[errno]);
return ret;
}
#if defined(BSD) && !defined(VPRINTF)
int
vsprintf(str, fmt, ap)
char *str, *fmt;
va_list ap;
{
FILE f;
int len;
f._flag = _IOWRT+_IOSTRG;
f._ptr = str;
f._cnt = 32767;
len = _doprnt(fmt, ap, &f);
*f._ptr = 0;
return (len);
}
int
vfprintf(iop, fmt, ap)
FILE *iop;
char *fmt;
va_list ap;
{
int len;
len = _doprnt(fmt, ap, iop);
return (ferror(iop) ? EOF : len);
}
int
vprintf(fmt, ap)
char *fmt;
va_list ap;
{
int len;
len = _doprnt(fmt, ap, stdout);
return (ferror(stdout) ? EOF : len);
}
#endif
|