FIXES revision 1.3 1 1.1 christos /****************************************************************
2 1.1 christos Copyright (C) Lucent Technologies 1997
3 1.1 christos All Rights Reserved
4 1.1 christos
5 1.1 christos Permission to use, copy, modify, and distribute this software and
6 1.1 christos its documentation for any purpose and without fee is hereby
7 1.1 christos granted, provided that the above copyright notice appear in all
8 1.1 christos copies and that both that the copyright notice and this
9 1.1 christos permission notice and warranty disclaimer appear in supporting
10 1.1 christos documentation, and that the name Lucent Technologies or any of
11 1.1 christos its entities not be used in advertising or publicity pertaining
12 1.1 christos to distribution of the software without specific, written prior
13 1.1 christos permission.
14 1.1 christos
15 1.1 christos LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 1.1 christos INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
17 1.1 christos IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
18 1.1 christos SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 1.1 christos WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
20 1.1 christos IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
21 1.1 christos ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
22 1.1 christos THIS SOFTWARE.
23 1.1 christos ****************************************************************/
24 1.1 christos
25 1.1 christos This file lists all bug fixes, changes, etc., made since the AWK book
26 1.1 christos was sent to the printers in August, 1987.
27 1.1 christos
28 1.3 christos February 18, 2020:
29 1.3 christos Additional cleanups from Christos Zoulas. It's no longer necessary
30 1.3 christos to use the -y flag to bison.
31 1.3 christos
32 1.3 christos February 6, 2020:
33 1.3 christos Additional small cleanups from Christos Zoulas. awk is now
34 1.3 christos a little more robust about reporting I/O errors upon exit.
35 1.3 christos
36 1.3 christos January 31, 2020:
37 1.3 christos Merge PR #70, which avoids use of variable length arrays. Thanks
38 1.3 christos to GitHub user michaelforney. Fix issue #60 ({0} in interval
39 1.3 christos expressions doesn't work). Also get all tests working again.
40 1.3 christos Thanks to Arnold Robbins.
41 1.3 christos
42 1.3 christos January 24, 2020:
43 1.3 christos A number of small cleanups from Christos Zoulas. Add the close
44 1.3 christos on exec flag to files/pipes opened for redirection; courtesy of
45 1.3 christos Arnold Robbins.
46 1.3 christos
47 1.3 christos January 19, 2020:
48 1.3 christos If POSIXLY_CORRECT is set in the environment, then sub and gsub
49 1.3 christos use POSIX rules for multiple backslashes. This fixes Issue #66,
50 1.3 christos while maintaining backwards compatibility.
51 1.3 christos
52 1.3 christos January 9, 2020:
53 1.3 christos Input/output errors on closing files are now fatal instead of
54 1.3 christos mere warnings. Thanks to Martijn Dekker <martijn@inlv.org>.
55 1.3 christos
56 1.3 christos January 5, 2020:
57 1.3 christos Fix a bug in the concatentation of two string constants into
58 1.3 christos one done in the grammar. Fixes GitHub issue #61. Thanks
59 1.3 christos to GitHub user awkfan77 for pointing out the direction for
60 1.3 christos the fix. New test T.concat added to the test suite.
61 1.3 christos Fix a few memory leaks reported by valgrind, as well.
62 1.3 christos
63 1.3 christos December 27, 2019:
64 1.3 christos Fix a bug whereby a{0,3} could match four a's. Thanks to
65 1.3 christos "Anonymous AWK fan" for the report.
66 1.3 christos
67 1.3 christos December 11, 2019:
68 1.3 christos Further printf-related fixes for 32 bit systems.
69 1.3 christos Thanks again to Christos Zoulas.
70 1.3 christos
71 1.3 christos December 8, 2019:
72 1.3 christos Fix the return value of sprintf("%d") on 32 bit systems.
73 1.3 christos Thanks to Jim Lowe for the report and to Christos Zoulas
74 1.3 christos for the fix.
75 1.3 christos
76 1.3 christos November 10, 2019:
77 1.3 christos Convert a number of Boolean integer variables into
78 1.3 christos actual bools. Convert compile_time variable into an
79 1.3 christos enum and simplify some of the related code. Thanks
80 1.3 christos to Arnold Robbins.
81 1.3 christos
82 1.3 christos November 8, 2019:
83 1.3 christos Fix from Ori Bernstein to get UTF-8 characters instead of
84 1.3 christos bytes when FS = "". This is currently the only bit of
85 1.3 christos the One True Awk that understands multibyte characters.
86 1.3 christos From Arnold Robbins, apply some cleanups in the test suite.
87 1.3 christos
88 1.3 christos October 25, 2019:
89 1.3 christos More fixes and cleanups from NetBSD, courtesy of Christos
90 1.3 christos Zoulas. Merges PRs 54 and 55.
91 1.3 christos
92 1.3 christos October 24, 2019:
93 1.3 christos Import second round of code cleanups from NetBSD. Much thanks
94 1.3 christos to Christos Zoulas (GitHub user zoulasc). Merges PR 53.
95 1.3 christos Add an optimization for string concatenation, also from
96 1.3 christos Christos.
97 1.3 christos
98 1.3 christos October 17, 2019:
99 1.3 christos Import code cleanups from NetBSD. Much thanks to Christos
100 1.3 christos Zoulas (GitHub user zoulasc). Merges PR 51.
101 1.3 christos
102 1.3 christos October 6, 2019:
103 1.3 christos Import code from NetBSD awk that implements RS as a regular
104 1.3 christos expression.
105 1.3 christos
106 1.3 christos September 10, 2019:
107 1.3 christos Fixes for various array / memory overruns found via gcc's
108 1.3 christos -fsanitize=unknown. Thanks to Alexander Richardson (GitHub
109 1.3 christos user arichardson). Merges PRs 47 and 48.
110 1.3 christos
111 1.3 christos July 28, 2019:
112 1.3 christos Import grammar optimization from NetBSD: Two string constants
113 1.3 christos concatenated together get turned into a single string.
114 1.3 christos
115 1.3 christos July 26, 2019:
116 1.3 christos Support POSIX-specified C-style escape sequences "\a" (alarm)
117 1.3 christos and "\v" (vertical tab) in command line arguments and regular
118 1.3 christos expressions, further to the support for them in strings added on
119 1.3 christos Apr 9, 1989. These now no longer match as literal "a" and "v"
120 1.3 christos characters (as they don't on other awk implementations).
121 1.3 christos Thanks to Martijn Dekker.
122 1.3 christos
123 1.3 christos July 17, 2019:
124 1.3 christos Pull in a number of code cleanups and minor fixes from
125 1.3 christos Warner Losh's bsd-ota branch. The only user visible change
126 1.3 christos is the use of random(3) as the random number generator.
127 1.3 christos Thanks to Warner Losh for collecting all these fixes in
128 1.3 christos one easy place to get them from.
129 1.3 christos
130 1.3 christos July 16, 2019:
131 1.3 christos Fix field splitting to use FS value as of the time a record
132 1.3 christos was read or assigned to. Thanks to GitHub user Cody Mello (melloc)
133 1.3 christos for the fix. (Merged from his branch, via PR #42.) Updated
134 1.3 christos testdir/T.split per said PR as well.
135 1.3 christos
136 1.3 christos June 24, 2019:
137 1.3 christos Extract awktest.tar into testdir directory. Add some very
138 1.3 christos simple mechanics to the makefile for running the tests and
139 1.3 christos for cleaning up. No changes to awk itself.
140 1.3 christos
141 1.3 christos June 17, 2019:
142 1.3 christos Disallow deleting SYMTAB and its elements, which creates
143 1.3 christos use-after-free bugs. Thanks to GitHub user Cody Mello (melloc)
144 1.3 christos for the fix. (Merged from PR #43.)
145 1.3 christos
146 1.3 christos June 5, 2019:
147 1.3 christos Allow unmatched right parenthesis in a regular expression to
148 1.3 christos be treated literally. Fixes Issue #40. Thanks to GitHub user
149 1.3 christos Warner Losh (bsdimp) for the report. Thanks to Arnold Robbins
150 1.3 christos for the fix.
151 1.3 christos
152 1.3 christos May 29,2019:
153 1.3 christos Fix check for command line arguments to no longer require that
154 1.3 christos first character after '=' not be another '='. Reverts change of
155 1.3 christos August 11, 1989. Thanks to GitHub user Jamie Landeg Jones for
156 1.3 christos pointing out the issue; from Issue #38.
157 1.3 christos
158 1.3 christos Apr 7, 2019:
159 1.3 christos Update awktest.tar(p.50) to use modern options to sort. Needed
160 1.3 christos for Android development. Thanks to GitHub user mohd-akram (Mohamed
161 1.3 christos Akram). From Issue #33.
162 1.3 christos
163 1.3 christos Mar 12, 2019:
164 1.3 christos Added very simplistic support for cross-compiling in the
165 1.3 christos makefile. We are NOT going to go in the direction of the
166 1.3 christos autotools, though. Thanks to GitHub user nee-san for
167 1.3 christos the basic change. (Merged from PR #34.)
168 1.3 christos
169 1.3 christos Mar 5, 2019:
170 1.3 christos Added support for POSIX-standard interval expressions (a.k.a.
171 1.3 christos bounds, a.k.a. repetition expressions) in regular expressions,
172 1.3 christos backported (via NetBSD) from Apple awk-24 (20070501).
173 1.3 christos Thanks to Martijn Dekker <martijn@inlv.org> for the port.
174 1.3 christos (Merged from PR #30.)
175 1.3 christos
176 1.3 christos Mar 3, 2019:
177 1.3 christos Merge PRs as follows:
178 1.3 christos #12: Avoid undefined behaviour when using ctype(3) functions in
179 1.3 christos relex(). Thanks to GitHub user iamleot.
180 1.3 christos #31: Make getline handle numeric strings, and update FIXES. Thanks
181 1.3 christos to GitHub user arnoldrobbins.
182 1.3 christos #32: maketab: support build systems with read-only source. Thanks
183 1.3 christos to GitHub user enh.
184 1.3 christos
185 1.3 christos Jan 25, 2019:
186 1.3 christos Make getline handle numeric strings properly in all cases.
187 1.3 christos (Thanks, Arnold.)
188 1.3 christos
189 1.3 christos Jan 21, 2019:
190 1.3 christos Merged a number of small fixes from GitHub pull requests.
191 1.3 christos Thanks to GitHub users Arnold Robbins (arnoldrobbins),
192 1.3 christos Cody Mello (melloc) and Christoph Junghans (junghans).
193 1.3 christos PR numbers: 13-21, 23, 24, 27.
194 1.3 christos
195 1.3 christos Oct 25, 2018:
196 1.3 christos Added test in maketab.c to prevent generating a proctab entry
197 1.3 christos for YYSTYPE_IS_DEFINED. It was harmless but some gcc settings
198 1.3 christos generated a warning message. Thanks to Nan Xiao for report.
199 1.3 christos
200 1.3 christos Aug 27, 2018:
201 1.3 christos Disallow '$' in printf formats; arguments evaluated in order
202 1.3 christos and printed in order.
203 1.3 christos
204 1.3 christos Added some casts to silence warnings on debugging printfs.
205 1.3 christos (Thanks, Arnold.)
206 1.3 christos
207 1.3 christos Aug 23, 2018:
208 1.3 christos A long list of fixes courtesy of Arnold Robbins,
209 1.3 christos to whom profound thanks.
210 1.3 christos
211 1.3 christos 1. ofs-rebuild: OFS value used to rebuild the record was incorrect.
212 1.3 christos Fixed August 19, 2014. Revised fix August 2018.
213 1.3 christos
214 1.3 christos 2. system-status: Instead of a floating-point division by 256, use
215 1.3 christos the wait(2) macros to create a reasonable exit status.
216 1.3 christos Fixed March 12, 2016.
217 1.3 christos
218 1.3 christos 3. space: Use provided xisblank() function instead of ispace() for
219 1.3 christos matching [[:blank:]].
220 1.3 christos
221 1.3 christos 4. a-format: Add POSIX standard %a and %A to supported formats. Check
222 1.3 christos at runtime that this format is available.
223 1.3 christos
224 1.3 christos 5. decr-NF: Decrementing NF did not change $0. This is a decades-old
225 1.3 christos bug. There are interactions with the old and new value of OFS as well.
226 1.3 christos Most of the fix came from the NetBSD awk.
227 1.3 christos
228 1.3 christos 6. string-conv: String conversions of scalars were sticky. Once a
229 1.3 christos conversion to string happened, even with OFMT, that value was used until
230 1.3 christos a new numeric value was assigned, even if OFMT differed from CONVFMT,
231 1.3 christos and also if CONVFMT changed.
232 1.3 christos
233 1.3 christos 7. unary-plus: Unary plus on a string constant returned the string.
234 1.3 christos Instead, it should convert the value to numeric and give that value.
235 1.3 christos
236 1.3 christos Also added Arnold's tests for these to awktest.tar as T.arnold.
237 1.3 christos
238 1.3 christos Aug 15, 2018:
239 1.3 christos fixed mangled awktest.tar (thanks, Arnold), posted all
240 1.3 christos current (very minor) fixes to github / onetrueawk
241 1.3 christos
242 1.3 christos Jun 7, 2018:
243 1.3 christos (yes, a long layoff)
244 1.3 christos Updated some broken tests (beebe.tar, T.lilly)
245 1.3 christos [thanks to Arnold Robbins]
246 1.3 christos
247 1.3 christos Mar 26, 2015:
248 1.3 christos buffer overflow in error reporting; thanks to tobias ulmer
249 1.3 christos and john-mark gurney for spotting it and the fix.
250 1.3 christos
251 1.3 christos Feb 4, 2013:
252 1.3 christos cleaned up a handful of tests that didn't seem to actually
253 1.3 christos test for correct behavior: T.latin1, T.gawk.
254 1.3 christos
255 1.3 christos Jan 5, 2013:
256 1.3 christos added ,NULL initializer to static Cells in run.c; not really
257 1.3 christos needed but cleaner. Thanks to Michael Bombardieri.
258 1.3 christos
259 1.2 christos Dec 20, 2012:
260 1.2 christos fiddled makefile to get correct yacc and bison flags. pick yacc
261 1.2 christos (linux) or bison (mac) as necessary.
262 1.2 christos
263 1.2 christos added __attribute__((__noreturn__)) to a couple of lines in
264 1.2 christos proto.h, to silence someone's enthusiastic checker.
265 1.2 christos
266 1.2 christos fixed obscure call by value bug in split(a[1],a) reported on
267 1.2 christos 9fans. the management of temporary values is just a mess; i
268 1.2 christos took a shortcut by making an extra string copy. thanks
269 1.2 christos to paul patience and arnold robbins for passing it on and for
270 1.2 christos proposed patches.
271 1.2 christos
272 1.2 christos tiny fiddle in setfval to eliminate -0 results in T.expr, which
273 1.2 christos has irritated me for 20+ years.
274 1.2 christos
275 1.2 christos Aug 10, 2011:
276 1.2 christos another fix to avoid core dump with delete(ARGV); again, many thanks
277 1.2 christos to ruslan ermilov.
278 1.2 christos
279 1.2 christos Aug 7, 2011:
280 1.2 christos split(s, a, //) now behaves the same as split(s, a, "")
281 1.2 christos
282 1.2 christos Jun 12, 2011:
283 1.2 christos /pat/, \n /pat/ {...} is now legal, though bad style to use.
284 1.2 christos
285 1.2 christos added checks to new -v code that permits -vnospace; thanks to
286 1.2 christos ruslan ermilov for spotting this and providing the patch.
287 1.2 christos
288 1.2 christos removed fixed limit on number of open files; thanks to aleksey
289 1.2 christos cheusov and christos zoulos.
290 1.2 christos
291 1.2 christos fixed day 1 bug that resurrected deleted elements of ARGV when
292 1.2 christos used as filenames (in lib.c).
293 1.2 christos
294 1.2 christos minor type fiddles to make gcc -Wall -pedantic happier (but not
295 1.2 christos totally so); turned on -fno-strict-aliasing in makefile.
296 1.2 christos
297 1.2 christos May 6, 2011:
298 1.2 christos added #ifdef for isblank.
299 1.2 christos now allows -ffoo as well as -f foo arguments.
300 1.2 christos (thanks, ruslan)
301 1.2 christos
302 1.2 christos May 1, 2011:
303 1.2 christos after advice from todd miller, kevin lo, ruslan ermilov,
304 1.2 christos and arnold robbins, changed srand() to return the previous
305 1.2 christos seed (which is 1 on the first call of srand). the seed is
306 1.2 christos an Awkfloat internally though converted to unsigned int to
307 1.2 christos pass to the library srand(). thanks, everyone.
308 1.2 christos
309 1.2 christos fixed a subtle (and i hope low-probability) overflow error
310 1.2 christos in fldbld, by adding space for one extra \0. thanks to
311 1.2 christos robert bassett for spotting this one and providing a fix.
312 1.2 christos
313 1.2 christos removed the files related to compilation on windows. i no
314 1.2 christos longer have anything like a current windows environment, so
315 1.2 christos i can't test any of it.
316 1.2 christos
317 1.1 christos May 23, 2010:
318 1.1 christos fixed long-standing overflow bug in run.c; many thanks to
319 1.1 christos nelson beebe for spotting it and providing the fix.
320 1.1 christos
321 1.1 christos fixed bug that didn't parse -vd=1 properly; thanks to santiago
322 1.1 christos vila for spotting it.
323 1.1 christos
324 1.1 christos Feb 8, 2010:
325 1.1 christos i give up. replaced isblank with isspace in b.c; there are
326 1.1 christos no consistent header files.
327 1.1 christos
328 1.1 christos Nov 26, 2009:
329 1.1 christos fixed a long-standing issue with when FS takes effect. a
330 1.1 christos change to FS is now noticed immediately for subsequent splits.
331 1.1 christos
332 1.1 christos changed the name getline() to awkgetline() to avoid yet another
333 1.1 christos name conflict somewhere.
334 1.1 christos
335 1.1 christos Feb 11, 2009:
336 1.1 christos temporarily for now defined HAS_ISBLANK, since that seems to
337 1.1 christos be the best way through the thicket. isblank arrived in C99,
338 1.1 christos but seems to be arriving at different systems at different
339 1.1 christos times.
340 1.1 christos
341 1.1 christos Oct 8, 2008:
342 1.1 christos fixed typo in b.c that set tmpvec wrongly. no one had ever
343 1.1 christos run into the problem, apparently. thanks to alistair crooks.
344 1.1 christos
345 1.1 christos Oct 23, 2007:
346 1.1 christos minor fix in lib.c: increase inputFS to 100, change malloc
347 1.2 christos for fields to n+1.
348 1.1 christos
349 1.1 christos fixed memory fault caused by out of order test in setsval.
350 1.1 christos
351 1.1 christos thanks to david o'brien, freebsd, for both fixes.
352 1.1 christos
353 1.1 christos May 1, 2007:
354 1.1 christos fiddle in makefile to fix for BSD make; thanks to igor sobrado.
355 1.1 christos
356 1.1 christos Mar 31, 2007:
357 1.1 christos fixed some null pointer refs calling adjbuf.
358 1.1 christos
359 1.1 christos Feb 21, 2007:
360 1.1 christos fixed a bug in matching the null RE in sub and gsub. thanks to al aho
361 1.1 christos who actually did the fix (in b.c), and to wolfgang seeberg for finding
362 1.1 christos it and providing a very compact test case.
363 1.1 christos
364 1.1 christos fixed quotation in b.c; thanks to Hal Pratt and the Princeton Dante
365 1.1 christos Project.
366 1.1 christos
367 1.1 christos removed some no-effect asserts in run.c.
368 1.1 christos
369 1.1 christos fiddled maketab.c to not complain about bison-generated values.
370 1.1 christos
371 1.1 christos removed the obsolete -V argument; fixed --version to print the
372 1.1 christos version and exit.
373 1.1 christos
374 1.1 christos fixed wording and an outright error in the usage message; thanks to igor
375 1.1 christos sobrado and jason mcintyre.
376 1.1 christos
377 1.1 christos fixed a bug in -d that caused core dump if no program followed.
378 1.1 christos
379 1.1 christos Jan 1, 2007:
380 1.1 christos dropped mac.code from makefile; there are few non-MacOSX
381 1.1 christos mac's these days.
382 1.1 christos
383 1.1 christos Jan 17, 2006:
384 1.1 christos system() not flagged as unsafe in the unadvertised -safe option.
385 1.1 christos found it while enhancing tests before shipping the ;login: article.
386 1.1 christos practice what you preach.
387 1.1 christos
388 1.1 christos removed the 9-years-obsolete -mr and -mf flags.
389 1.1 christos
390 1.1 christos added -version and --version options.
391 1.1 christos
392 1.1 christos core dump on linux with BEGIN {nextfile}, now fixed.
393 1.1 christos
394 1.2 christos removed some #ifdef's in run.c and lex.c that appear to no
395 1.1 christos longer be necessary.
396 1.1 christos
397 1.1 christos Apr 24, 2005:
398 1.1 christos modified lib.c so that values of $0 et al are preserved in the END
399 1.1 christos block, apparently as required by posix. thanks to havard eidnes
400 1.1 christos for the report and code.
401 1.1 christos
402 1.1 christos Jan 14, 2005:
403 1.1 christos fixed infinite loop in parsing, originally found by brian tsang.
404 1.1 christos thanks to arnold robbins for a suggestion that started me
405 1.1 christos rethinking it.
406 1.1 christos
407 1.1 christos Dec 31, 2004:
408 1.2 christos prevent overflow of -f array in main, head off potential error in
409 1.2 christos call of SYNTAX(), test malloc return in lib.c, all with thanks to
410 1.1 christos todd miller.
411 1.1 christos
412 1.1 christos Dec 22, 2004:
413 1.1 christos cranked up size of NCHARS; coverity thinks it can be overrun with
414 1.1 christos smaller size, and i think that's right. added some assertions to b.c
415 1.1 christos to catch places where it might overrun. the RE code is still fragile.
416 1.1 christos
417 1.1 christos Dec 5, 2004:
418 1.1 christos fixed a couple of overflow problems with ridiculous field numbers:
419 1.1 christos e.g., print $(2^32-1). thanks to ruslan ermilov, giorgos keramidas
420 1.1 christos and david o'brien at freebsd.org for patches. this really should
421 1.1 christos be re-done from scratch.
422 1.1 christos
423 1.1 christos Nov 21, 2004:
424 1.1 christos fixed another 25-year-old RE bug, in split. it's another failure
425 1.1 christos to (re-)initialize. thanks to steve fisher for spotting this and
426 1.1 christos providing a good test case.
427 1.1 christos
428 1.1 christos Nov 22, 2003:
429 1.1 christos fixed a bug in regular expressions that dates (so help me) from 1977;
430 1.1 christos it's been there from the beginning. an anchored longest match that
431 1.1 christos was longer than the number of states triggered a failure to initialize
432 1.1 christos the machine properly. many thanks to moinak ghosh for not only finding
433 1.1 christos this one but for providing a fix, in some of the most mysterious
434 1.1 christos code known to man.
435 1.1 christos
436 1.1 christos fixed a storage leak in call() that appears to have been there since
437 1.2 christos 1983 or so -- a function without an explicit return that assigns a
438 1.2 christos string to a parameter leaked a Cell. thanks to moinak ghosh for
439 1.1 christos spotting this very subtle one.
440 1.1 christos
441 1.1 christos Jul 31, 2003:
442 1.1 christos fixed, thanks to andrey chernov and ruslan ermilov, a bug in lex.c
443 1.1 christos that mis-handled the character 255 in input. (it was being compared
444 1.1 christos to EOF with a signed comparison.)
445 1.1 christos
446 1.1 christos Jul 29, 2003:
447 1.1 christos fixed (i think) the long-standing botch that included the beginning of
448 1.1 christos line state ^ for RE's in the set of valid characters; this led to a
449 1.1 christos variety of odd problems, including failure to properly match certain
450 1.1 christos regular expressions in non-US locales. thanks to ruslan for keeping
451 1.1 christos at this one.
452 1.1 christos
453 1.1 christos Jul 28, 2003:
454 1.1 christos n-th try at getting internationalization right, with thanks to volker
455 1.1 christos kiefel, arnold robbins and ruslan ermilov for advice, though they
456 1.1 christos should not be blamed for the outcome. according to posix, "." is the
457 1.1 christos radix character in programs and command line arguments regardless of
458 1.1 christos the locale; otherwise, the locale should prevail for input and output
459 1.1 christos of numbers. so it's intended to work that way.
460 1.2 christos
461 1.1 christos i have rescinded the attempt to use strcoll in expanding shorthands in
462 1.1 christos regular expressions (cclenter). its properties are much too
463 1.1 christos surprising; for example [a-c] matches aAbBc in locale en_US but abBcC
464 1.1 christos in locale fr_CA. i can see how this might arise by implementation
465 1.1 christos but i cannot explain it to a human user. (this behavior can be seen
466 1.1 christos in gawk as well; we're leaning on the same library.)
467 1.1 christos
468 1.1 christos the issue appears to be that strcoll is meant for sorting, where
469 1.1 christos merging upper and lower case may make sense (though note that unix
470 1.1 christos sort does not do this by default either). it is not appropriate
471 1.1 christos for regular expressions, where the goal is to match specific
472 1.1 christos patterns of characters. in any case, the notations [:lower:], etc.,
473 1.1 christos are available in awk, and they are more likely to work correctly in
474 1.1 christos most locales.
475 1.1 christos
476 1.1 christos a moratorium is hereby declared on internationalization changes.
477 1.1 christos i apologize to friends and colleagues in other parts of the world.
478 1.1 christos i would truly like to get this "right", but i don't know what
479 1.1 christos that is, and i do not want to keep making changes until it's clear.
480 1.1 christos
481 1.1 christos Jul 4, 2003:
482 1.1 christos fixed bug that permitted non-terminated RE, as in "awk /x".
483 1.1 christos
484 1.1 christos Jun 1, 2003:
485 1.1 christos subtle change to split: if source is empty, number of elems
486 1.1 christos is always 0 and the array is not set.
487 1.1 christos
488 1.1 christos Mar 21, 2003:
489 1.1 christos added some parens to isblank, in another attempt to make things
490 1.1 christos internationally portable.
491 1.1 christos
492 1.1 christos Mar 14, 2003:
493 1.1 christos the internationalization changes, somewhat modified, are now
494 1.1 christos reinstated. in theory awk will now do character comparisons
495 1.1 christos and case conversions in national language, but "." will always
496 1.1 christos be the decimal point separator on input and output regardless
497 1.1 christos of national language. isblank(){} has an #ifndef.
498 1.1 christos
499 1.1 christos this no longer compiles on windows: LC_MESSAGES isn't defined
500 1.1 christos in vc6++.
501 1.1 christos
502 1.1 christos fixed subtle behavior in field and record splitting: if FS is
503 1.1 christos a single character and RS is not empty, \n is NOT a separator.
504 1.1 christos this tortuous reading is found in the awk book; behavior now
505 1.1 christos matches gawk and mawk.
506 1.1 christos
507 1.1 christos Dec 13, 2002:
508 1.1 christos for the moment, the internationalization changes of nov 29 are
509 1.1 christos rolled back -- programs like x = 1.2 don't work in some locales,
510 1.1 christos because the parser is expecting x = 1,2. until i understand this
511 1.1 christos better, this will have to wait.
512 1.1 christos
513 1.1 christos Nov 29, 2002:
514 1.1 christos modified b.c (with tiny changes in main and run) to support
515 1.1 christos locales, using strcoll and iswhatever tests for posix character
516 1.1 christos classes. thanks to ruslan ermilov (ru (at) freebsd.org) for code.
517 1.1 christos the function isblank doesn't seem to have propagated to any
518 1.1 christos header file near me, so it's there explicitly. not properly
519 1.1 christos tested on non-ascii character sets by me.
520 1.1 christos
521 1.1 christos Jun 28, 2002:
522 1.1 christos modified run/format() and tran/getsval() to do a slightly better
523 1.1 christos job on using OFMT for output from print and CONVFMT for other
524 1.2 christos number->string conversions, as promised by posix and done by
525 1.1 christos gawk and mawk. there are still places where it doesn't work
526 1.1 christos right if CONVFMT is changed; by then the STR attribute of the
527 1.1 christos variable has been irrevocably set. thanks to arnold robbins for
528 1.1 christos code and examples.
529 1.1 christos
530 1.1 christos fixed subtle bug in format that could get core dump. thanks to
531 1.1 christos Jaromir Dolecek <jdolecek@NetBSD.org> for finding and fixing.
532 1.1 christos minor cleanup in run.c / format() at the same time.
533 1.1 christos
534 1.1 christos added some tests for null pointers to debugging printf's, which
535 1.1 christos were never intended for external consumption. thanks to dave
536 1.1 christos kerns (dkerns (at) lucent.com) for pointing this out.
537 1.1 christos
538 1.1 christos GNU compatibility: an empty regexp matches anything (thanks to
539 1.1 christos dag-erling smorgrav, des (at) ofug.org). subject to reversion if
540 1.1 christos this does more harm than good.
541 1.1 christos
542 1.1 christos pervasive small changes to make things more const-correct, as
543 1.1 christos reported by gcc's -Wwrite-strings. as it says in the gcc manual,
544 1.1 christos this may be more nuisance than useful. provoked by a suggestion
545 1.1 christos and code from arnaud desitter, arnaud@nimbus.geog.ox.ac.uk
546 1.1 christos
547 1.1 christos minor documentation changes to note that this now compiles out
548 1.1 christos of the box on Mac OS X.
549 1.1 christos
550 1.1 christos Feb 10, 2002:
551 1.1 christos changed types in posix chars structure to quiet solaris cc.
552 1.1 christos
553 1.1 christos Jan 1, 2002:
554 1.1 christos fflush() or fflush("") flushes all files and pipes.
555 1.1 christos
556 1.2 christos length(arrayname) returns number of elements; thanks to
557 1.1 christos arnold robbins for suggestion.
558 1.1 christos
559 1.1 christos added a makefile.win to make it easier to build on windows.
560 1.1 christos based on dan allen's buildwin.bat.
561 1.1 christos
562 1.1 christos Nov 16, 2001:
563 1.1 christos added support for posix character class names like [:digit:],
564 1.1 christos which are not exactly shorter than [0-9] and perhaps no more
565 1.1 christos portable. thanks to dag-erling smorgrav for code.
566 1.1 christos
567 1.1 christos Feb 16, 2001:
568 1.1 christos removed -m option; no longer needed, and it was actually
569 1.1 christos broken (noted thanks to volker kiefel).
570 1.1 christos
571 1.1 christos Feb 10, 2001:
572 1.1 christos fixed an appalling bug in gettok: any sequence of digits, +,-, E, e,
573 1.1 christos and period was accepted as a valid number if it started with a period.
574 1.1 christos this would never have happened with the lex version.
575 1.1 christos
576 1.1 christos other 1-character botches, now fixed, include a bare $ and a
577 1.1 christos bare " at the end of the input.
578 1.1 christos
579 1.1 christos Feb 7, 2001:
580 1.1 christos more (const char *) casts in b.c and tran.c to silence warnings.
581 1.1 christos
582 1.1 christos Nov 15, 2000:
583 1.1 christos fixed a bug introduced in august 1997 that caused expressions
584 1.1 christos like $f[1] to be syntax errors. thanks to arnold robbins for
585 1.1 christos noticing this and providing a fix.
586 1.1 christos
587 1.1 christos Oct 30, 2000:
588 1.1 christos fixed some nextfile bugs: not handling all cases. thanks to
589 1.1 christos arnold robbins for pointing this out. new regressions added.
590 1.1 christos
591 1.1 christos close() is now a function. it returns whatever the library
592 1.1 christos fclose returns, and -1 for closing a file or pipe that wasn't
593 1.1 christos opened.
594 1.1 christos
595 1.1 christos Sep 24, 2000:
596 1.1 christos permit \n explicitly in character classes; won't work right
597 1.1 christos if comes in as "[\n]" but ok as /[\n]/, because of multiple
598 1.1 christos processing of \'s. thanks to arnold robbins.
599 1.1 christos
600 1.1 christos July 5, 2000:
601 1.1 christos minor fiddles in tran.c to keep compilers happy about uschar.
602 1.1 christos thanks to norman wilson.
603 1.1 christos
604 1.1 christos May 25, 2000:
605 1.1 christos yet another attempt at making 8-bit input work, with another
606 1.2 christos band-aid in b.c (member()), and some (uschar) casts to head
607 1.1 christos off potential errors in subscripts (like isdigit). also
608 1.1 christos changed HAT to NCHARS-2. thanks again to santiago vila.
609 1.1 christos
610 1.1 christos changed maketab.c to ignore apparently out of range definitions
611 1.1 christos instead of halting; new freeBSD generates one. thanks to
612 1.1 christos jon snader <jsnader (at) ix.netcom.com> for pointing out the problem.
613 1.1 christos
614 1.1 christos May 2, 2000:
615 1.1 christos fixed an 8-bit problem in b.c by making several char*'s into
616 1.1 christos unsigned char*'s. not clear i have them all yet. thanks to
617 1.1 christos Santiago Vila <sanvila (at) unex.es> for the bug report.
618 1.1 christos
619 1.1 christos Apr 21, 2000:
620 1.1 christos finally found and fixed a memory leak in function call; it's
621 1.1 christos been there since functions were added ~1983. thanks to
622 1.1 christos jon bentley for the test case that found it.
623 1.1 christos
624 1.1 christos added test in envinit to catch environment "variables" with
625 1.1 christos names beginning with '='; thanks to Berend Hasselman.
626 1.1 christos
627 1.1 christos Jul 28, 1999:
628 1.1 christos added test in defn() to catch function foo(foo), which
629 1.1 christos otherwise recurses until core dump. thanks to arnold
630 1.1 christos robbins for noticing this.
631 1.1 christos
632 1.1 christos Jun 20, 1999:
633 1.1 christos added *bp in gettok in lex.c; appears possible to exit function
634 1.1 christos without terminating the string. thanks to russ cox.
635 1.1 christos
636 1.1 christos Jun 2, 1999:
637 1.1 christos added function stdinit() to run to initialize files[] array,
638 1.1 christos in case stdin, etc., are not constants; some compilers care.
639 1.1 christos
640 1.1 christos May 10, 1999:
641 1.1 christos replaced the ERROR ... FATAL, etc., macros with functions
642 1.1 christos based on vprintf, to avoid problems caused by overrunning
643 1.1 christos fixed-size errbuf array. thanks to ralph corderoy for the
644 1.1 christos impetus, and for pointing out a string termination bug in
645 1.1 christos qstring as well.
646 1.1 christos
647 1.1 christos Apr 21, 1999:
648 1.1 christos fixed bug that caused occasional core dumps with commandline
649 1.1 christos variable with value ending in \. (thanks to nelson beebe for
650 1.1 christos the test case.)
651 1.1 christos
652 1.1 christos Apr 16, 1999:
653 1.2 christos with code kindly provided by Bruce Lilly, awk now parses
654 1.1 christos /=/ and similar constructs more sensibly in more places.
655 1.1 christos Bruce also provided some helpful test cases.
656 1.1 christos
657 1.1 christos Apr 5, 1999:
658 1.1 christos changed true/false to True/False in run.c to make it
659 1.1 christos easier to compile with C++. Added some casts on malloc
660 1.1 christos and realloc to be honest about casts; ditto. changed
661 1.1 christos ltype int to long in struct rrow to reduce some 64-bit
662 1.1 christos complaints; other changes scattered throughout for the
663 1.1 christos same purpose. thanks to Nelson Beebe for these portability
664 1.1 christos improvements.
665 1.1 christos
666 1.1 christos removed some horrible pointer-int casting in b.c and elsewhere
667 1.1 christos by adding ptoi and itonp to localize the casts, which are
668 1.1 christos all benign. fixed one incipient bug that showed up on sgi
669 1.1 christos in 64-bit mode.
670 1.1 christos
671 1.1 christos reset lineno for new source file; include filename in error
672 1.1 christos message. also fixed line number error in continuation lines.
673 1.1 christos (thanks to Nelson Beebe for both of these.)
674 1.1 christos
675 1.1 christos Mar 24, 1999:
676 1.1 christos Nelson Beebe notes that irix 5.3 yacc dies with a bogus
677 1.1 christos error; use a newer version or switch to bison, since sgi
678 1.1 christos is unlikely to fix it.
679 1.1 christos
680 1.1 christos Mar 5, 1999:
681 1.1 christos changed isnumber to is_number to avoid the problem caused by
682 1.1 christos versions of ctype.h that include the name isnumber.
683 1.1 christos
684 1.1 christos distribution now includes a script for building on a Mac,
685 1.1 christos thanks to Dan Allen.
686 1.1 christos
687 1.1 christos Feb 20, 1999:
688 1.1 christos fixed memory leaks in run.c (call) and tran.c (setfval).
689 1.1 christos thanks to Stephen Nutt for finding these and providing the fixes.
690 1.1 christos
691 1.1 christos Jan 13, 1999:
692 1.1 christos replaced srand argument by (unsigned int) in run.c;
693 1.1 christos avoids problem on Mac and potentially on Unix & Windows.
694 1.1 christos thanks to Dan Allen.
695 1.1 christos
696 1.1 christos added a few (int) casts to silence useless compiler warnings.
697 1.1 christos e.g., errorflag= in run.c jump().
698 1.1 christos
699 1.1 christos added proctab.c to the bundle outout; one less thing
700 1.1 christos to have to compile out of the box.
701 1.1 christos
702 1.1 christos added calls to _popen and _pclose to the win95 stub for
703 1.1 christos pipes (thanks to Steve Adams for this helpful suggestion).
704 1.1 christos seems to work, though properties are not well understood
705 1.1 christos by me, and it appears that under some circumstances the
706 1.1 christos pipe output is truncated. Be careful.
707 1.1 christos
708 1.1 christos Oct 19, 1998:
709 1.1 christos fixed a couple of bugs in getrec: could fail to update $0
710 1.2 christos after a getline var; because inputFS wasn't initialized,
711 1.1 christos could split $0 on every character, a misleading diversion.
712 1.1 christos
713 1.1 christos fixed caching bug in makedfa: LRU was actually removing
714 1.1 christos least often used.
715 1.1 christos
716 1.1 christos thanks to ross ridge for finding these, and for providing
717 1.1 christos great bug reports.
718 1.1 christos
719 1.1 christos May 12, 1998:
720 1.1 christos fixed potential bug in readrec: might fail to update record
721 1.1 christos pointer after growing. thanks to dan levy for spotting this
722 1.1 christos and suggesting the fix.
723 1.1 christos
724 1.1 christos Mar 12, 1998:
725 1.1 christos added -V to print version number and die.
726 1.1 christos
727 1.3 christos [notify dave kerns, dkerns (at) dacsoup.ih.lucent.com]
728 1.3 christos
729 1.1 christos Feb 11, 1998:
730 1.1 christos subtle silent bug in lex.c: if the program ended with a number
731 1.1 christos longer than 1 digit, part of the input would be pushed back and
732 1.1 christos parsed again because token buffer wasn't terminated right.
733 1.1 christos example: awk 'length($0) > 10'. blush. at least i found it
734 1.1 christos myself.
735 1.1 christos
736 1.1 christos Aug 31, 1997:
737 1.1 christos s/adelete/awkdelete/: SGI uses this in malloc.h.
738 1.1 christos thanks to nelson beebe for pointing this one out.
739 1.1 christos
740 1.1 christos Aug 21, 1997:
741 1.1 christos fixed some bugs in sub and gsub when replacement includes \\.
742 1.1 christos this is a dark, horrible corner, but at least now i believe that
743 1.1 christos the behavior is the same as gawk and the intended posix standard.
744 1.1 christos thanks to arnold robbins for advice here.
745 1.1 christos
746 1.1 christos Aug 9, 1997:
747 1.1 christos somewhat regretfully, replaced the ancient lex-based lexical
748 1.1 christos analyzer with one written in C. it's longer, generates less code,
749 1.1 christos and more portable; the old one depended too much on mysterious
750 1.1 christos properties of lex that were not preserved in other environments.
751 1.1 christos in theory these recognize the same language.
752 1.1 christos
753 1.1 christos now using strtod to test whether a string is a number, instead of
754 1.1 christos the convoluted original function. should be more portable and
755 1.1 christos reliable if strtod is implemented right.
756 1.1 christos
757 1.1 christos removed now-pointless optimization in makefile that tries to avoid
758 1.1 christos recompilation when awkgram.y is changed but symbols are not.
759 1.1 christos
760 1.1 christos removed most fixed-size arrays, though a handful remain, some
761 1.1 christos of which are unchecked. you have been warned.
762 1.1 christos
763 1.1 christos Aug 4, 1997:
764 1.1 christos with some trepidation, replaced the ancient code that managed
765 1.1 christos fields and $0 in fixed-size arrays with arrays that grow on
766 1.1 christos demand. there is still some tension between trying to make this
767 1.1 christos run fast and making it clean; not sure it's right yet.
768 1.1 christos
769 1.1 christos the ill-conceived -mr and -mf arguments are now useful only
770 1.1 christos for debugging. previous dynamic string code removed.
771 1.1 christos
772 1.1 christos numerous other minor cleanups along the way.
773 1.1 christos
774 1.1 christos Jul 30, 1997:
775 1.1 christos using code provided by dan levy (to whom profuse thanks), replaced
776 1.1 christos fixed-size arrays and awkward kludges by a fairly uniform mechanism
777 1.1 christos to grow arrays as needed for printf, sub, gsub, etc.
778 1.1 christos
779 1.1 christos Jul 23, 1997:
780 1.1 christos falling off the end of a function returns "" and 0, not 0.
781 1.1 christos thanks to arnold robbins.
782 1.1 christos
783 1.1 christos Jun 17, 1997:
784 1.1 christos replaced several fixed-size arrays by dynamically-created ones
785 1.1 christos in run.c; added overflow tests to some previously unchecked cases.
786 1.1 christos getline, toupper, tolower.
787 1.1 christos
788 1.1 christos getline code is still broken in that recursive calls may wind
789 1.1 christos up using the same space. [fixed later]
790 1.1 christos
791 1.1 christos increased RECSIZE to 8192 to push problems further over the horizon.
792 1.1 christos
793 1.1 christos added \r to \n as input line separator for programs, not data.
794 1.1 christos damn CRLFs.
795 1.1 christos
796 1.1 christos modified format() to permit explicit printf("%c", 0) to include
797 1.1 christos a null byte in output. thanks to ken stailey for the fix.
798 1.1 christos
799 1.1 christos added a "-safe" argument that disables file output (print >,
800 1.1 christos print >>), process creation (cmd|getline, print |, system), and
801 1.1 christos access to the environment (ENVIRON). this is a first approximation
802 1.1 christos to a "safe" version of awk, but don't rely on it too much. thanks
803 1.1 christos to joan feigenbaum and matt blaze for the inspiration long ago.
804 1.1 christos
805 1.1 christos Jul 8, 1996:
806 1.1 christos fixed long-standing bug in sub, gsub(/a/, "\\\\&"); thanks to
807 1.1 christos ralph corderoy.
808 1.1 christos
809 1.1 christos Jun 29, 1996:
810 1.1 christos fixed awful bug in new field splitting; didn't get all the places
811 1.1 christos where input was done.
812 1.1 christos
813 1.1 christos Jun 28, 1996:
814 1.1 christos changed field-splitting to conform to posix definition: fields are
815 1.1 christos split using the value of FS at the time of input; it used to be
816 1.1 christos the value when the field or NF was first referred to, a much less
817 1.1 christos predictable definition. thanks to arnold robbins for encouragement
818 1.1 christos to do the right thing.
819 1.1 christos
820 1.1 christos May 28, 1996:
821 1.1 christos fixed appalling but apparently unimportant bug in parsing octal
822 1.1 christos numbers in reg exprs.
823 1.1 christos
824 1.1 christos explicit hex in reg exprs now limited to 2 chars: \xa, \xaa.
825 1.1 christos
826 1.1 christos May 27, 1996:
827 1.1 christos cleaned up some declarations so gcc -Wall is now almost silent.
828 1.1 christos
829 1.1 christos makefile now includes backup copies of ytab.c and lexyy.c in case
830 1.1 christos one makes before looking; it also avoids recreating lexyy.c unless
831 1.1 christos really needed.
832 1.1 christos
833 1.1 christos s/aprintf/awkprint, s/asprintf/awksprintf/ to avoid some name clashes
834 1.1 christos with unwisely-written header files.
835 1.1 christos
836 1.1 christos thanks to jeffrey friedl for several of these.
837 1.1 christos
838 1.1 christos May 26, 1996:
839 1.1 christos an attempt to rationalize the (unsigned) char issue. almost all
840 1.1 christos instances of unsigned char have been removed; the handful of places
841 1.1 christos in b.c where chars are used as table indices have been hand-crafted.
842 1.1 christos added some latin-1 tests to the regression, but i'm not confident;
843 1.1 christos none of my compilers seem to care much. thanks to nelson beebe for
844 1.1 christos pointing out some others that do care.
845 1.1 christos
846 1.1 christos May 2, 1996:
847 1.1 christos removed all register declarations.
848 1.1 christos
849 1.1 christos enhanced split(), as in gawk, etc: split(s, a, "") splits s into
850 1.1 christos a[1]...a[length(s)] with each character a single element.
851 1.1 christos
852 1.1 christos made the same changes for field-splitting if FS is "".
853 1.1 christos
854 1.1 christos added nextfile, as in gawk: causes immediate advance to next
855 1.1 christos input file. (thanks to arnold robbins for inspiration and code).
856 1.1 christos
857 1.1 christos small fixes to regexpr code: can now handle []], [[], and
858 1.2 christos variants; [] is now a syntax error, rather than matching
859 1.1 christos everything; [z-a] is now empty, not z. far from complete
860 1.1 christos or correct, however. (thanks to jeffrey friedl for pointing out
861 1.1 christos some awful behaviors.)
862 1.1 christos
863 1.1 christos Apr 29, 1996:
864 1.1 christos replaced uchar by uschar everywhere; apparently some compilers
865 1.1 christos usurp this name and this causes conflicts.
866 1.1 christos
867 1.1 christos fixed call to time in run.c (bltin); arg is time_t *.
868 1.1 christos
869 1.1 christos replaced horrible pointer/long punning in b.c by a legitimate
870 1.1 christos union. should be safer on 64-bit machines and cleaner everywhere.
871 1.1 christos (thanks to nelson beebe for pointing out some of these problems.)
872 1.1 christos
873 1.1 christos replaced nested comments by #if 0...#endif in run.c, lib.c.
874 1.1 christos
875 1.1 christos removed getsval, setsval, execute macros from run.c and lib.c.
876 1.1 christos machines are 100x faster than they were when these macros were
877 1.1 christos first used.
878 1.1 christos
879 1.1 christos revised filenames: awk.g.y => awkgram.y, awk.lx.l => awklex.l,
880 1.1 christos y.tab.[ch] => ytab.[ch], lex.yy.c => lexyy.c, all in the aid of
881 1.1 christos portability to nameless systems.
882 1.1 christos
883 1.1 christos "make bundle" now includes yacc and lex output files for recipients
884 1.1 christos who don't have yacc or lex.
885 1.1 christos
886 1.1 christos Aug 15, 1995:
887 1.1 christos initialized Cells in setsymtab more carefully; some fields
888 1.1 christos were not set. (thanks to purify, all of whose complaints i
889 1.1 christos think i now understand.)
890 1.1 christos
891 1.1 christos fixed at least one error in gsub that looked at -1-th element
892 1.1 christos of an array when substituting for a null match (e.g., $).
893 1.1 christos
894 1.1 christos delete arrayname is now legal; it clears the elements but leaves
895 1.1 christos the array, which may not be the right behavior.
896 1.1 christos
897 1.1 christos modified makefile: my current make can't cope with the test used
898 1.1 christos to avoid unnecessary yacc invocations.
899 1.1 christos
900 1.1 christos Jul 17, 1995:
901 1.1 christos added dynamically growing strings to awk.lx.l and b.c
902 1.1 christos to permit regular expressions to be much bigger.
903 1.1 christos the state arrays can still overflow.
904 1.1 christos
905 1.1 christos Aug 24, 1994:
906 1.1 christos detect duplicate arguments in function definitions (mdm).
907 1.1 christos
908 1.1 christos May 11, 1994:
909 1.1 christos trivial fix to printf to limit string size in sub().
910 1.1 christos
911 1.1 christos Apr 22, 1994:
912 1.1 christos fixed yet another subtle self-assignment problem:
913 1.1 christos $1 = $2; $1 = $1 clobbered $1.
914 1.1 christos
915 1.1 christos Regression tests now use private echo, to avoid quoting problems.
916 1.1 christos
917 1.1 christos Feb 2, 1994:
918 1.1 christos changed error() to print line number as %d, not %g.
919 1.1 christos
920 1.1 christos Jul 23, 1993:
921 1.1 christos cosmetic changes: increased sizes of some arrays,
922 1.1 christos reworded some error messages.
923 1.1 christos
924 1.1 christos added CONVFMT as in posix (just replaced OFMT in getsval)
925 1.1 christos
926 1.1 christos FILENAME is now "" until the first thing that causes a file
927 1.1 christos to be opened.
928 1.1 christos
929 1.1 christos Nov 28, 1992:
930 1.1 christos deleted yyunput and yyoutput from proto.h;
931 1.1 christos different versions of lex give these different declarations.
932 1.1 christos
933 1.1 christos May 31, 1992:
934 1.1 christos added -mr N and -mf N options: more record and fields.
935 1.1 christos these really ought to adjust automatically.
936 1.1 christos
937 1.1 christos cleaned up some error messages; "out of space" now means
938 1.1 christos malloc returned NULL in all cases.
939 1.1 christos
940 1.1 christos changed rehash so that if it runs out, it just returns;
941 1.1 christos things will continue to run slow, but maybe a bit longer.
942 1.1 christos
943 1.1 christos Apr 24, 1992:
944 1.1 christos remove redundant close of stdin when using -f -.
945 1.1 christos
946 1.1 christos got rid of core dump with -d; awk -d just prints date.
947 1.1 christos
948 1.1 christos Apr 12, 1992:
949 1.1 christos added explicit check for /dev/std(in,out,err) in redirection.
950 1.1 christos unlike gawk, no /dev/fd/n yet.
951 1.1 christos
952 1.1 christos added (file/pipe) builtin. hard to test satisfactorily.
953 1.1 christos not posix.
954 1.1 christos
955 1.1 christos Feb 20, 1992:
956 1.1 christos recompile after abortive changes; should be unchanged.
957 1.1 christos
958 1.1 christos Dec 2, 1991:
959 1.1 christos die-casting time: converted to ansi C, installed that.
960 1.1 christos
961 1.1 christos Nov 30, 1991:
962 1.1 christos fixed storage leak in freefa, failing to recover [N]CCL.
963 1.1 christos thanks to Bill Jones (jones (at) cs.usask.ca)
964 1.1 christos
965 1.1 christos Nov 19, 1991:
966 1.1 christos use RAND_MAX instead of literal in builtin().
967 1.1 christos
968 1.1 christos Nov 12, 1991:
969 1.1 christos cranked up some fixed-size arrays in b.c, and added a test for
970 1.1 christos overflow in penter. thanks to mark larsen.
971 1.1 christos
972 1.1 christos Sep 24, 1991:
973 1.1 christos increased buffer in gsub. a very crude fix to a general problem.
974 1.1 christos and again on Sep 26.
975 1.1 christos
976 1.1 christos Aug 18, 1991:
977 1.1 christos enforce variable name syntax for commandline variables: has to
978 1.1 christos start with letter or _.
979 1.1 christos
980 1.1 christos Jul 27, 1991:
981 1.1 christos allow newline after ; in for statements.
982 1.1 christos
983 1.1 christos Jul 21, 1991:
984 1.1 christos fixed so that in self-assignment like $1=$1, side effects
985 1.1 christos like recomputing $0 take place. (this is getting subtle.)
986 1.1 christos
987 1.1 christos Jun 30, 1991:
988 1.1 christos better test for detecting too-long output record.
989 1.1 christos
990 1.1 christos Jun 2, 1991:
991 1.1 christos better defense against very long printf strings.
992 1.1 christos made break and continue illegal outside of loops.
993 1.1 christos
994 1.1 christos May 13, 1991:
995 1.1 christos removed extra arg on gettemp, tempfree. minor error message rewording.
996 1.1 christos
997 1.1 christos May 6, 1991:
998 1.1 christos fixed silly bug in hex parsing in hexstr().
999 1.1 christos removed an apparently unnecessary test in isnumber().
1000 1.1 christos warn about weird printf conversions.
1001 1.1 christos fixed unchecked array overwrite in relex().
1002 1.1 christos
1003 1.1 christos changed for (i in array) to access elements in sorted order.
1004 1.1 christos then unchanged it -- it really does run slower in too many cases.
1005 1.1 christos left the code in place, commented out.
1006 1.1 christos
1007 1.1 christos Feb 10, 1991:
1008 1.1 christos check error status on all writes, to avoid banging on full disks.
1009 1.1 christos
1010 1.1 christos Jan 28, 1991:
1011 1.1 christos awk -f - reads the program from stdin.
1012 1.1 christos
1013 1.1 christos Jan 11, 1991:
1014 1.1 christos failed to set numeric state on $0 in cmd|getline context in run.c.
1015 1.1 christos
1016 1.1 christos Nov 2, 1990:
1017 1.1 christos fixed sleazy test for integrality in getsval; use modf.
1018 1.1 christos
1019 1.1 christos Oct 29, 1990:
1020 1.1 christos fixed sleazy buggy code in lib.c that looked (incorrectly) for
1021 1.1 christos too long input lines.
1022 1.1 christos
1023 1.1 christos Oct 14, 1990:
1024 1.1 christos fixed the bug on p. 198 in which it couldn't deduce that an
1025 1.1 christos argument was an array in some contexts. replaced the error
1026 1.1 christos message in intest() by code that damn well makes it an array.
1027 1.1 christos
1028 1.1 christos Oct 8, 1990:
1029 1.1 christos fixed horrible bug: types and values were not preserved in
1030 1.1 christos some kinds of self-assignment. (in assign().)
1031 1.1 christos
1032 1.1 christos Aug 24, 1990:
1033 1.1 christos changed NCHARS to 256 to handle 8-bit characters in strings
1034 1.1 christos presented to match(), etc.
1035 1.1 christos
1036 1.1 christos Jun 26, 1990:
1037 1.1 christos changed struct rrow (awk.h) to use long instead of int for lval,
1038 1.1 christos since cfoll() stores a pointer in it. now works better when int's
1039 1.1 christos are smaller than pointers!
1040 1.1 christos
1041 1.1 christos May 6, 1990:
1042 1.1 christos AVA fixed the grammar so that ! is uniformly of the same precedence as
1043 1.1 christos unary + and -. This renders illegal some constructs like !x=y, which
1044 1.1 christos now has to be parenthesized as !(x=y), and makes others work properly:
1045 1.1 christos !x+y is (!x)+y, and x!y is x !y, not two pattern-action statements.
1046 1.1 christos (These problems were pointed out by Bob Lenk of Posix.)
1047 1.1 christos
1048 1.1 christos Added \x to regular expressions (already in strings).
1049 1.1 christos Limited octal to octal digits; \8 and \9 are not octal.
1050 1.1 christos Centralized the code for parsing escapes in regular expressions.
1051 1.1 christos Added a bunch of tests to T.re and T.sub to verify some of this.
1052 1.1 christos
1053 1.1 christos Feb 9, 1990:
1054 1.1 christos fixed null pointer dereference bug in main.c: -F[nothing]. sigh.
1055 1.1 christos
1056 1.1 christos restored srand behavior: it returns the current seed.
1057 1.1 christos
1058 1.1 christos Jan 18, 1990:
1059 1.1 christos srand now returns previous seed value (0 to start).
1060 1.1 christos
1061 1.1 christos Jan 5, 1990:
1062 1.1 christos fix potential problem in tran.c -- something was freed,
1063 1.1 christos then used in freesymtab.
1064 1.1 christos
1065 1.1 christos Oct 18, 1989:
1066 1.1 christos another try to get the max number of open files set with
1067 1.1 christos relatively machine-independent code.
1068 1.1 christos
1069 1.1 christos small fix to input() in case of multiple reads after EOF.
1070 1.1 christos
1071 1.1 christos Oct 11, 1989:
1072 1.1 christos FILENAME is now defined in the BEGIN block -- too many old
1073 1.1 christos programs broke.
1074 1.1 christos
1075 1.1 christos "-" means stdin in getline as well as on the commandline.
1076 1.1 christos
1077 1.1 christos added a bunch of casts to the code to tell the truth about
1078 1.1 christos char * vs. unsigned char *, a right royal pain. added a
1079 1.1 christos setlocale call to the front of main, though probably no one
1080 1.1 christos has it usefully implemented yet.
1081 1.1 christos
1082 1.1 christos Aug 24, 1989:
1083 1.1 christos removed redundant relational tests against nullnode if parse
1084 1.1 christos tree already had a relational at that point.
1085 1.1 christos
1086 1.1 christos Aug 11, 1989:
1087 1.1 christos fixed bug: commandline variable assignment has to look like
1088 1.1 christos var=something. (consider the man page for =, in file =.1)
1089 1.1 christos
1090 1.1 christos changed number of arguments to functions to static arrays
1091 1.1 christos to avoid repeated malloc calls.
1092 1.1 christos
1093 1.1 christos Aug 2, 1989:
1094 1.1 christos restored -F (space) separator
1095 1.1 christos
1096 1.1 christos Jul 30, 1989:
1097 1.1 christos added -v x=1 y=2 ... for immediate commandline variable assignment;
1098 1.1 christos done before the BEGIN block for sure. they have to precede the
1099 1.1 christos program if the program is on the commandline.
1100 1.1 christos Modified Aug 2 to require a separate -v for each assignment.
1101 1.1 christos
1102 1.1 christos Jul 10, 1989:
1103 1.1 christos fixed ref-thru-zero bug in environment code in tran.c
1104 1.1 christos
1105 1.1 christos Jun 23, 1989:
1106 1.1 christos add newline to usage message.
1107 1.1 christos
1108 1.1 christos Jun 14, 1989:
1109 1.1 christos added some missing ansi printf conversion letters: %i %X %E %G.
1110 1.1 christos no sensible meaning for h or L, so they may not do what one expects.
1111 1.1 christos
1112 1.1 christos made %* conversions work.
1113 1.1 christos
1114 1.1 christos changed x^y so that if n is a positive integer, it's done
1115 1.1 christos by explicit multiplication, thus achieving maximum accuracy.
1116 1.1 christos (this should be done by pow() but it seems not to be locally.)
1117 1.1 christos done to x ^= y as well.
1118 1.1 christos
1119 1.1 christos Jun 4, 1989:
1120 1.1 christos ENVIRON array contains environment: if shell variable V=thing,
1121 1.1 christos ENVIRON["V"] is "thing"
1122 1.1 christos
1123 1.1 christos multiple -f arguments permitted. error reporting is naive.
1124 1.1 christos (they were permitted before, but only the last was used.)
1125 1.1 christos
1126 1.1 christos fixed a really stupid botch in the debugging macro dprintf
1127 1.1 christos
1128 1.1 christos fixed order of evaluation of commandline assignments to match
1129 1.1 christos what the book claims: an argument of the form x=e is evaluated
1130 1.1 christos at the time it would have been opened if it were a filename (p 63).
1131 1.1 christos this invalidates the suggested answer to ex 4-1 (p 195).
1132 1.1 christos
1133 1.1 christos removed some code that permitted -F (space) fieldseparator,
1134 1.1 christos since it didn't quite work right anyway. (restored aug 2)
1135 1.1 christos
1136 1.1 christos Apr 27, 1989:
1137 1.1 christos Line number now accumulated correctly for comment lines.
1138 1.1 christos
1139 1.1 christos Apr 26, 1989:
1140 1.1 christos Debugging output now includes a version date,
1141 1.1 christos if one compiles it into the source each time.
1142 1.1 christos
1143 1.1 christos Apr 9, 1989:
1144 1.1 christos Changed grammar to prohibit constants as 3rd arg of sub and gsub;
1145 1.1 christos prevents class of overwriting-a-constant errors. (Last one?)
1146 1.1 christos This invalidates the "banana" example on page 43 of the book.
1147 1.1 christos
1148 1.1 christos Added \a ("alert"), \v (vertical tab), \xhhh (hexadecimal),
1149 1.1 christos as in ANSI, for strings. Rescinded the sloppiness that permitted
1150 1.1 christos non-octal digits in \ooo. Warning: not all compilers and libraries
1151 1.1 christos will be able to deal with \x correctly.
1152 1.1 christos
1153 1.1 christos Jan 9, 1989:
1154 1.1 christos Fixed bug that caused tempcell list to contain a duplicate.
1155 1.1 christos The fix is kludgy.
1156 1.1 christos
1157 1.1 christos Dec 17, 1988:
1158 1.1 christos Catches some more commandline errors in main.
1159 1.1 christos Removed redundant decl of modf in run.c (confuses some compilers).
1160 1.1 christos Warning: there's no single declaration of malloc, etc., in awk.h
1161 1.1 christos that seems to satisfy all compilers.
1162 1.1 christos
1163 1.1 christos Dec 7, 1988:
1164 1.1 christos Added a bit of code to error printing to avoid printing nulls.
1165 1.1 christos (Not clear that it actually would.)
1166 1.1 christos
1167 1.1 christos Nov 27, 1988:
1168 1.1 christos With fear and trembling, modified the grammar to permit
1169 1.1 christos multiple pattern-action statements on one line without
1170 1.1 christos an explicit separator. By definition, this capitulation
1171 1.1 christos to the ghost of ancient implementations remains undefined
1172 1.1 christos and thus subject to change without notice or apology.
1173 1.1 christos DO NOT COUNT ON IT.
1174 1.1 christos
1175 1.1 christos Oct 30, 1988:
1176 1.1 christos Fixed bug in call() that failed to recover storage.
1177 1.1 christos
1178 1.1 christos A warning is now generated if there are more arguments
1179 1.1 christos in the call than in the definition (in lieu of fixing
1180 1.1 christos another storage leak).
1181 1.1 christos
1182 1.1 christos Oct 20, 1988:
1183 1.1 christos Fixed %c: if expr is numeric, use numeric value;
1184 1.1 christos otherwise print 1st char of string value. still
1185 1.1 christos doesn't work if the value is 0 -- won't print \0.
1186 1.1 christos
1187 1.1 christos Added a few more checks for running out of malloc.
1188 1.1 christos
1189 1.1 christos Oct 12, 1988:
1190 1.1 christos Fixed bug in call() that freed local arrays twice.
1191 1.1 christos
1192 1.1 christos Fixed to handle deletion of non-existent array right;
1193 1.1 christos complains about attempt to delete non-array element.
1194 1.1 christos
1195 1.1 christos Sep 30, 1988:
1196 1.1 christos Now guarantees to evaluate all arguments of built-in
1197 1.1 christos functions, as in C; the appearance is that arguments
1198 1.1 christos are evaluated before the function is called. Places
1199 1.1 christos affected are sub (gsub was ok), substr, printf, and
1200 1.1 christos all the built-in arithmetic functions in bltin().
1201 1.1 christos A warning is generated if a bltin() is called with
1202 1.1 christos the wrong number of arguments.
1203 1.1 christos
1204 1.1 christos This requires changing makeprof on p167 of the book.
1205 1.1 christos
1206 1.1 christos Aug 23, 1988:
1207 1.1 christos setting FILENAME in BEGIN caused core dump, apparently
1208 1.1 christos because it was freeing space not allocated by malloc.
1209 1.1 christos
1210 1.1 christos July 24, 1988:
1211 1.1 christos fixed egregious error in toupper/tolower functions.
1212 1.1 christos still subject to rescinding, however.
1213 1.1 christos
1214 1.1 christos July 2, 1988:
1215 1.1 christos flush stdout before opening file or pipe
1216 1.1 christos
1217 1.1 christos July 2, 1988:
1218 1.1 christos performance bug in b.c/cgoto(): not freeing some sets of states.
1219 1.1 christos partial fix only right now, and the number of states increased
1220 1.1 christos to make it less obvious.
1221 1.1 christos
1222 1.1 christos June 1, 1988:
1223 1.1 christos check error status on close
1224 1.1 christos
1225 1.1 christos May 28, 1988:
1226 1.1 christos srand returns seed value it's using.
1227 1.1 christos see 1/18/90
1228 1.1 christos
1229 1.1 christos May 22, 1988:
1230 1.1 christos Removed limit on depth of function calls.
1231 1.1 christos
1232 1.1 christos May 10, 1988:
1233 1.1 christos Fixed lib.c to permit _ in commandline variable names.
1234 1.1 christos
1235 1.1 christos Mar 25, 1988:
1236 1.1 christos main.c fixed to recognize -- as terminator of command-
1237 1.1 christos line options. Illegal options flagged.
1238 1.1 christos Error reporting slightly cleaned up.
1239 1.1 christos
1240 1.1 christos Dec 2, 1987:
1241 1.1 christos Newer C compilers apply a strict scope rule to extern
1242 1.1 christos declarations within functions. Two extern declarations in
1243 1.1 christos lib.c and tran.c have been moved to obviate this problem.
1244 1.1 christos
1245 1.1 christos Oct xx, 1987:
1246 1.1 christos Reluctantly added toupper and tolower functions.
1247 1.1 christos Subject to rescinding without notice.
1248 1.1 christos
1249 1.1 christos Sep 17, 1987:
1250 1.1 christos Error-message printer had printf(s) instead of
1251 1.1 christos printf("%s",s); got core dumps when the message
1252 1.1 christos included a %.
1253 1.1 christos
1254 1.1 christos Sep 12, 1987:
1255 1.1 christos Very long printf strings caused core dump;
1256 1.1 christos fixed aprintf, asprintf, format to catch them.
1257 1.1 christos Can still get a core dump in printf itself.
1258 1.1 christos
1259 1.1 christos
1260