Remove some more dead initialization.
[dragonfly.git] / contrib / awk20070501 / FIXES
blob01a54ef8ce440f3d17f5dff01816451bc4448886
1 /****************************************************************
2 Copyright (C) Lucent Technologies 1997
3 All Rights Reserved
5 Permission to use, copy, modify, and distribute this software and
6 its documentation for any purpose and without fee is hereby
7 granted, provided that the above copyright notice appear in all
8 copies and that both that the copyright notice and this
9 permission notice and warranty disclaimer appear in supporting
10 documentation, and that the name Lucent Technologies or any of
11 its entities not be used in advertising or publicity pertaining
12 to distribution of the software without specific, written prior
13 permission.
15 LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
17 IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
18 SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
20 IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
21 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
22 THIS SOFTWARE.
23 ****************************************************************/
25 This file lists all bug fixes, changes, etc., made since the AWK book
26 was sent to the printers in August, 1987.
28 May 1, 2007:
29         fiddle in makefile to fix for BSD make; thanks to igor sobrado.
31 Mar 31, 2007:
32         fixed some null pointer refs calling adjbuf.
34 Feb 21, 2007:
35         fixed a bug in matching the null RE in sub and gsub.  thanks to al aho
36         who actually did the fix (in b.c), and to wolfgang seeberg for finding
37         it and providing a very compact test case.
39         fixed quotation in b.c; thanks to Hal Pratt and the Princeton Dante
40         Project.
42         removed some no-effect asserts in run.c.
44         fiddled maketab.c to not complain about bison-generated values.
46         removed the obsolete -V argument; fixed --version to print the
47         version and exit.
49         fixed wording and an outright error in the usage message; thanks to igor
50         sobrado and jason mcintyre.
52         fixed a bug in -d that caused core dump if no program followed.
54 Jan 1, 2007:
55         dropped mac.code from makefile; there are few non-MacOSX
56         mac's these days.
58 Jan 17, 2006:
59         system() not flagged as unsafe in the unadvertised -safe option.
60         found it while enhancing tests before shipping the ;login: article.
61         practice what you preach.
63         removed the 9-years-obsolete -mr and -mf flags.
65         added -version and --version options.
67         core dump on linux with BEGIN {nextfile}, now fixed.
69         removed some #ifdef's in run.c and lex.c that appear to no 
70         longer be necessary.
72 Apr 24, 2005:
73         modified lib.c so that values of $0 et al are preserved in the END
74         block, apparently as required by posix.  thanks to havard eidnes
75         for the report and code.
77 Jan 14, 2005:
78         fixed infinite loop in parsing, originally found by brian tsang.
79         thanks to arnold robbins for a suggestion that started me
80         rethinking it.
82 Dec 31, 2004:
83         prevent overflow of -f array in main, head off potential error in 
84         call of SYNTAX(), test malloc return in lib.c, all with thanks to 
85         todd miller.
87 Dec 22, 2004:
88         cranked up size of NCHARS; coverity thinks it can be overrun with
89         smaller size, and i think that's right.  added some assertions to b.c
90         to catch places where it might overrun.  the RE code is still fragile.
92 Dec 5, 2004:
93         fixed a couple of overflow problems with ridiculous field numbers:
94         e.g., print $(2^32-1).  thanks to ruslan ermilov, giorgos keramidas
95         and david o'brien at freebsd.org for patches.  this really should
96         be re-done from scratch.
98 Nov 21, 2004:
99         fixed another 25-year-old RE bug, in split.  it's another failure
100         to (re-)initialize.  thanks to steve fisher for spotting this and
101         providing a good test case.
103 Nov 22, 2003:
104         fixed a bug in regular expressions that dates (so help me) from 1977;
105         it's been there from the beginning.  an anchored longest match that
106         was longer than the number of states triggered a failure to initialize
107         the machine properly.  many thanks to moinak ghosh for not only finding
108         this one but for providing a fix, in some of the most mysterious
109         code known to man.
111         fixed a storage leak in call() that appears to have been there since
112         1983 or so -- a function without an explicit return that assigns a 
113         string to a parameter leaked a Cell.  thanks to moinak ghosh for 
114         spotting this very subtle one.
116 Jul 31, 2003:
117         fixed, thanks to andrey chernov and ruslan ermilov, a bug in lex.c
118         that mis-handled the character 255 in input.  (it was being compared
119         to EOF with a signed comparison.)
121 Jul 29, 2003:
122         fixed (i think) the long-standing botch that included the beginning of
123         line state ^ for RE's in the set of valid characters; this led to a
124         variety of odd problems, including failure to properly match certain
125         regular expressions in non-US locales.  thanks to ruslan for keeping
126         at this one.
128 Jul 28, 2003:
129         n-th try at getting internationalization right, with thanks to volker
130         kiefel, arnold robbins and ruslan ermilov for advice, though they
131         should not be blamed for the outcome.  according to posix, "."  is the
132         radix character in programs and command line arguments regardless of
133         the locale; otherwise, the locale should prevail for input and output
134         of numbers.  so it's intended to work that way.
135         
136         i have rescinded the attempt to use strcoll in expanding shorthands in
137         regular expressions (cclenter).  its properties are much too
138         surprising; for example [a-c] matches aAbBc in locale en_US but abBcC
139         in locale fr_CA.  i can see how this might arise by implementation
140         but i cannot explain it to a human user.  (this behavior can be seen
141         in gawk as well; we're leaning on the same library.)
143         the issue appears to be that strcoll is meant for sorting, where
144         merging upper and lower case may make sense (though note that unix
145         sort does not do this by default either).  it is not appropriate
146         for regular expressions, where the goal is to match specific
147         patterns of characters.  in any case, the notations [:lower:], etc.,
148         are available in awk, and they are more likely to work correctly in
149         most locales.
151         a moratorium is hereby declared on internationalization changes.
152         i apologize to friends and colleagues in other parts of the world.
153         i would truly like to get this "right", but i don't know what
154         that is, and i do not want to keep making changes until it's clear.
156 Jul 4, 2003:
157         fixed bug that permitted non-terminated RE, as in "awk /x".
159 Jun 1, 2003:
160         subtle change to split: if source is empty, number of elems
161         is always 0 and the array is not set.
163 Mar 21, 2003:
164         added some parens to isblank, in another attempt to make things
165         internationally portable.
167 Mar 14, 2003:
168         the internationalization changes, somewhat modified, are now
169         reinstated.  in theory awk will now do character comparisons
170         and case conversions in national language, but "." will always
171         be the decimal point separator on input and output regardless
172         of national language.  isblank(){} has an #ifndef.
174         this no longer compiles on windows: LC_MESSAGES isn't defined
175         in vc6++.
177         fixed subtle behavior in field and record splitting: if FS is
178         a single character and RS is not empty, \n is NOT a separator.
179         this tortuous reading is found in the awk book; behavior now
180         matches gawk and mawk.
182 Dec 13, 2002:
183         for the moment, the internationalization changes of nov 29 are
184         rolled back -- programs like x = 1.2 don't work in some locales,
185         because the parser is expecting x = 1,2.  until i understand this
186         better, this will have to wait.
188 Nov 29, 2002:
189         modified b.c (with tiny changes in main and run) to support
190         locales, using strcoll and iswhatever tests for posix character
191         classes.  thanks to ruslan ermilov (ru@freebsd.org) for code.
192         the function isblank doesn't seem to have propagated to any
193         header file near me, so it's there explicitly.  not properly
194         tested on non-ascii character sets by me.
196 Jun 28, 2002:
197         modified run/format() and tran/getsval() to do a slightly better
198         job on using OFMT for output from print and CONVFMT for other
199         number->string conversions, as promised by posix and done by 
200         gawk and mawk.  there are still places where it doesn't work
201         right if CONVFMT is changed; by then the STR attribute of the
202         variable has been irrevocably set.  thanks to arnold robbins for
203         code and examples.
205         fixed subtle bug in format that could get core dump.  thanks to
206         Jaromir Dolecek <jdolecek@NetBSD.org> for finding and fixing.
207         minor cleanup in run.c / format() at the same time.
209         added some tests for null pointers to debugging printf's, which
210         were never intended for external consumption.  thanks to dave
211         kerns (dkerns@lucent.com) for pointing this out.
213         GNU compatibility: an empty regexp matches anything (thanks to
214         dag-erling smorgrav, des@ofug.org).  subject to reversion if
215         this does more harm than good.
217         pervasive small changes to make things more const-correct, as
218         reported by gcc's -Wwrite-strings.  as it says in the gcc manual,
219         this may be more nuisance than useful.  provoked by a suggestion
220         and code from arnaud desitter, arnaud@nimbus.geog.ox.ac.uk
222         minor documentation changes to note that this now compiles out
223         of the box on Mac OS X.
225 Feb 10, 2002:
226         changed types in posix chars structure to quiet solaris cc.
228 Jan 1, 2002:
229         fflush() or fflush("") flushes all files and pipes.
231         length(arrayname) returns number of elements; thanks to 
232         arnold robbins for suggestion.
234         added a makefile.win to make it easier to build on windows.
235         based on dan allen's buildwin.bat.
237 Nov 16, 2001:
238         added support for posix character class names like [:digit:],
239         which are not exactly shorter than [0-9] and perhaps no more
240         portable.  thanks to dag-erling smorgrav for code.
242 Feb 16, 2001:
243         removed -m option; no longer needed, and it was actually
244         broken (noted thanks to volker kiefel).
246 Feb 10, 2001:
247         fixed an appalling bug in gettok: any sequence of digits, +,-, E, e,
248         and period was accepted as a valid number if it started with a period.
249         this would never have happened with the lex version.
251         other 1-character botches, now fixed, include a bare $ and a
252         bare " at the end of the input.
254 Feb 7, 2001:
255         more (const char *) casts in b.c and tran.c to silence warnings.
257 Nov 15, 2000:
258         fixed a bug introduced in august 1997 that caused expressions
259         like $f[1] to be syntax errors.  thanks to arnold robbins for
260         noticing this and providing a fix.
262 Oct 30, 2000:
263         fixed some nextfile bugs: not handling all cases.  thanks to
264         arnold robbins for pointing this out.  new regressions added.
266         close() is now a function.  it returns whatever the library
267         fclose returns, and -1 for closing a file or pipe that wasn't
268         opened.
270 Sep 24, 2000:
271         permit \n explicitly in character classes; won't work right
272         if comes in as "[\n]" but ok as /[\n]/, because of multiple
273         processing of \'s.  thanks to arnold robbins.
275 July 5, 2000:
276         minor fiddles in tran.c to keep compilers happy about uschar.
277         thanks to norman wilson.
279 May 25, 2000:
280         yet another attempt at making 8-bit input work, with another
281         band-aid in b.c (member()), and some (uschar) casts to head 
282         off potential errors in subscripts (like isdigit).  also
283         changed HAT to NCHARS-2.  thanks again to santiago vila.
285         changed maketab.c to ignore apparently out of range definitions
286         instead of halting; new freeBSD generates one.  thanks to
287         jon snader <jsnader@ix.netcom.com> for pointing out the problem.
289 May 2, 2000:
290         fixed an 8-bit problem in b.c by making several char*'s into
291         unsigned char*'s.  not clear i have them all yet.  thanks to
292         Santiago Vila <sanvila@unex.es> for the bug report.
294 Apr 21, 2000:
295         finally found and fixed a memory leak in function call; it's
296         been there since functions were added ~1983.  thanks to
297         jon bentley for the test case that found it.
299         added test in envinit to catch environment "variables" with
300         names beginning with '='; thanks to Berend Hasselman.
302 Jul 28, 1999:
303         added test in defn() to catch function foo(foo), which
304         otherwise recurses until core dump.  thanks to arnold
305         robbins for noticing this.
307 Jun 20, 1999:
308         added *bp in gettok in lex.c; appears possible to exit function
309         without terminating the string.  thanks to russ cox.
311 Jun 2, 1999:
312         added function stdinit() to run to initialize files[] array,
313         in case stdin, etc., are not constants; some compilers care.
315 May 10, 1999:
316         replaced the ERROR ... FATAL, etc., macros with functions
317         based on vprintf, to avoid problems caused by overrunning
318         fixed-size errbuf array.  thanks to ralph corderoy for the
319         impetus, and for pointing out a string termination bug in
320         qstring as well.
322 Apr 21, 1999:
323         fixed bug that caused occasional core dumps with commandline
324         variable with value ending in \.  (thanks to nelson beebe for
325         the test case.)
327 Apr 16, 1999:
328         with code kindly provided by Bruce Lilly, awk now parses 
329         /=/ and similar constructs more sensibly in more places.
330         Bruce also provided some helpful test cases.
332 Apr 5, 1999:
333         changed true/false to True/False in run.c to make it
334         easier to compile with C++.  Added some casts on malloc
335         and realloc to be honest about casts; ditto.  changed
336         ltype int to long in struct rrow to reduce some 64-bit
337         complaints; other changes scattered throughout for the
338         same purpose.  thanks to Nelson Beebe for these portability
339         improvements.
341         removed some horrible pointer-int casting in b.c and elsewhere
342         by adding ptoi and itonp to localize the casts, which are
343         all benign.  fixed one incipient bug that showed up on sgi
344         in 64-bit mode.
346         reset lineno for new source file; include filename in error
347         message.  also fixed line number error in continuation lines.
348         (thanks to Nelson Beebe for both of these.)
350 Mar 24, 1999:
351         Nelson Beebe notes that irix 5.3 yacc dies with a bogus
352         error; use a newer version or switch to bison, since sgi
353         is unlikely to fix it.
355 Mar 5, 1999:
356         changed isnumber to is_number to avoid the problem caused by
357         versions of ctype.h that include the name isnumber.
359         distribution now includes a script for building on a Mac,
360         thanks to Dan Allen.
362 Feb 20, 1999:
363         fixed memory leaks in run.c (call) and tran.c (setfval).
364         thanks to Stephen Nutt for finding these and providing the fixes.
366 Jan 13, 1999:
367         replaced srand argument by (unsigned int) in run.c;
368         avoids problem on Mac and potentially on Unix & Windows.
369         thanks to Dan Allen.
371         added a few (int) casts to silence useless compiler warnings.
372         e.g., errorflag= in run.c jump().
374         added proctab.c to the bundle outout; one less thing
375         to have to compile out of the box.
377         added calls to _popen and _pclose to the win95 stub for
378         pipes (thanks to Steve Adams for this helpful suggestion).
379         seems to work, though properties are not well understood
380         by me, and it appears that under some circumstances the
381         pipe output is truncated.  Be careful.
383 Oct 19, 1998:
384         fixed a couple of bugs in getrec: could fail to update $0
385         after a getline var; because inputFS wasn't initialized, 
386         could split $0 on every character, a misleading diversion.
388         fixed caching bug in makedfa: LRU was actually removing
389         least often used.
391         thanks to ross ridge for finding these, and for providing
392         great bug reports.
394 May 12, 1998:
395         fixed potential bug in readrec: might fail to update record
396         pointer after growing.  thanks to dan levy for spotting this
397         and suggesting the fix.
399 Mar 12, 1998:
400         added -V to print version number and die.
402 Feb 11, 1998:
403         subtle silent bug in lex.c: if the program ended with a number
404         longer than 1 digit, part of the input would be pushed back and
405         parsed again because token buffer wasn't terminated right.
406         example:  awk 'length($0) > 10'.  blush.  at least i found it
407         myself.
409 Aug 31, 1997:
410         s/adelete/awkdelete/: SGI uses this in malloc.h.
411         thanks to nelson beebe for pointing this one out.
413 Aug 21, 1997:
414         fixed some bugs in sub and gsub when replacement includes \\.
415         this is a dark, horrible corner, but at least now i believe that
416         the behavior is the same as gawk and the intended posix standard.
417         thanks to arnold robbins for advice here.
419 Aug 9, 1997:
420         somewhat regretfully, replaced the ancient lex-based lexical
421         analyzer with one written in C.  it's longer, generates less code,
422         and more portable; the old one depended too much on mysterious
423         properties of lex that were not preserved in other environments.
424         in theory these recognize the same language.
426         now using strtod to test whether a string is a number, instead of
427         the convoluted original function.  should be more portable and
428         reliable if strtod is implemented right.
430         removed now-pointless optimization in makefile that tries to avoid
431         recompilation when awkgram.y is changed but symbols are not.
433         removed most fixed-size arrays, though a handful remain, some
434         of which are unchecked.  you have been warned.
436 Aug 4, 1997:
437         with some trepidation, replaced the ancient code that managed
438         fields and $0 in fixed-size arrays with arrays that grow on
439         demand.  there is still some tension between trying to make this
440         run fast and making it clean; not sure it's right yet.
442         the ill-conceived -mr and -mf arguments are now useful only
443         for debugging.  previous dynamic string code removed.
445         numerous other minor cleanups along the way.
447 Jul 30, 1997:
448         using code provided by dan levy (to whom profuse thanks), replaced
449         fixed-size arrays and awkward kludges by a fairly uniform mechanism
450         to grow arrays as needed for printf, sub, gsub, etc.
452 Jul 23, 1997:
453         falling off the end of a function returns "" and 0, not 0.
454         thanks to arnold robbins.
456 Jun 17, 1997:
457         replaced several fixed-size arrays by dynamically-created ones
458         in run.c; added overflow tests to some previously unchecked cases.
459         getline, toupper, tolower.
461         getline code is still broken in that recursive calls may wind
462         up using the same space.  [fixed later]
464         increased RECSIZE to 8192 to push problems further over the horizon.
466         added \r to \n as input line separator for programs, not data.
467         damn CRLFs.
469         modified format() to permit explicit printf("%c", 0) to include
470         a null byte in output.  thanks to ken stailey for the fix.
472         added a "-safe" argument that disables file output (print >,
473         print >>), process creation (cmd|getline, print |, system), and
474         access to the environment (ENVIRON).  this is a first approximation
475         to a "safe" version of awk, but don't rely on it too much.  thanks
476         to joan feigenbaum and matt blaze for the inspiration long ago.
478 Jul 8, 1996:
479         fixed long-standing bug in sub, gsub(/a/, "\\\\&"); thanks to
480         ralph corderoy.
482 Jun 29, 1996:
483         fixed awful bug in new field splitting; didn't get all the places
484         where input was done.
486 Jun 28, 1996:
487         changed field-splitting to conform to posix definition: fields are
488         split using the value of FS at the time of input; it used to be
489         the value when the field or NF was first referred to, a much less
490         predictable definition.  thanks to arnold robbins for encouragement
491         to do the right thing.
493 May 28, 1996:
494         fixed appalling but apparently unimportant bug in parsing octal
495         numbers in reg exprs.
497         explicit hex in reg exprs now limited to 2 chars: \xa, \xaa.
499 May 27, 1996:
500         cleaned up some declarations so gcc -Wall is now almost silent.
502         makefile now includes backup copies of ytab.c and lexyy.c in case
503         one makes before looking; it also avoids recreating lexyy.c unless
504         really needed.
506         s/aprintf/awkprint, s/asprintf/awksprintf/ to avoid some name clashes
507         with unwisely-written header files.
509         thanks to jeffrey friedl for several of these.
511 May 26, 1996:
512         an attempt to rationalize the (unsigned) char issue.  almost all
513         instances of unsigned char have been removed; the handful of places
514         in b.c where chars are used as table indices have been hand-crafted.
515         added some latin-1 tests to the regression, but i'm not confident;
516         none of my compilers seem to care much.  thanks to nelson beebe for
517         pointing out some others that do care.
519 May 2, 1996:
520         removed all register declarations.
522         enhanced split(), as in gawk, etc:  split(s, a, "") splits s into
523         a[1]...a[length(s)] with each character a single element.
525         made the same changes for field-splitting if FS is "".
527         added nextfile, as in gawk: causes immediate advance to next
528         input file. (thanks to arnold robbins for inspiration and code).
530         small fixes to regexpr code:  can now handle []], [[], and
531         variants;  [] is now a syntax error, rather than matching 
532         everything;  [z-a] is now empty, not z.  far from complete
533         or correct, however.  (thanks to jeffrey friedl for pointing out
534         some awful behaviors.)
536 Apr 29, 1996:
537         replaced uchar by uschar everywhere; apparently some compilers
538         usurp this name and this causes conflicts.
540         fixed call to time in run.c (bltin); arg is time_t *.
542         replaced horrible pointer/long punning in b.c by a legitimate
543         union.  should be safer on 64-bit machines and cleaner everywhere.
544         (thanks to nelson beebe for pointing out some of these problems.)
546         replaced nested comments by #if 0...#endif in run.c, lib.c.
548         removed getsval, setsval, execute macros from run.c and lib.c.
549         machines are 100x faster than they were when these macros were
550         first used.
552         revised filenames: awk.g.y => awkgram.y, awk.lx.l => awklex.l,
553         y.tab.[ch] => ytab.[ch], lex.yy.c => lexyy.c, all in the aid of
554         portability to nameless systems.
556         "make bundle" now includes yacc and lex output files for recipients
557         who don't have yacc or lex.
559 Aug 15, 1995:
560         initialized Cells in setsymtab more carefully; some fields
561         were not set.  (thanks to purify, all of whose complaints i
562         think i now understand.)
564         fixed at least one error in gsub that looked at -1-th element
565         of an array when substituting for a null match (e.g., $).
567         delete arrayname is now legal; it clears the elements but leaves
568         the array, which may not be the right behavior.
570         modified makefile: my current make can't cope with the test used
571         to avoid unnecessary yacc invocations.
573 Jul 17, 1995:
574         added dynamically growing strings to awk.lx.l and b.c
575         to permit regular expressions to be much bigger.
576         the state arrays can still overflow.
578 Aug 24, 1994:
579         detect duplicate arguments in function definitions (mdm).
581 May 11, 1994:
582         trivial fix to printf to limit string size in sub().
584 Apr 22, 1994:
585         fixed yet another subtle self-assignment problem:
586         $1 = $2; $1 = $1 clobbered $1.
588         Regression tests now use private echo, to avoid quoting problems.
590 Feb 2, 1994:
591         changed error() to print line number as %d, not %g.
593 Jul 23, 1993:
594         cosmetic changes: increased sizes of some arrays,
595         reworded some error messages.
597         added CONVFMT as in posix (just replaced OFMT in getsval)
599         FILENAME is now "" until the first thing that causes a file
600         to be opened.
602 Nov 28, 1992:
603         deleted yyunput and yyoutput from proto.h;
604         different versions of lex give these different declarations.
606 May 31, 1992:
607         added -mr N and -mf N options: more record and fields.
608         these really ought to adjust automatically.
610         cleaned up some error messages; "out of space" now means
611         malloc returned NULL in all cases.
613         changed rehash so that if it runs out, it just returns;
614         things will continue to run slow, but maybe a bit longer.
616 Apr 24, 1992:
617         remove redundant close of stdin when using -f -.
619         got rid of core dump with -d; awk -d just prints date.
621 Apr 12, 1992:
622         added explicit check for /dev/std(in,out,err) in redirection.
623         unlike gawk, no /dev/fd/n yet.
625         added (file/pipe) builtin.  hard to test satisfactorily.
626         not posix.
628 Feb 20, 1992:
629         recompile after abortive changes;  should be unchanged.
631 Dec 2, 1991:
632         die-casting time:  converted to ansi C, installed that.
634 Nov 30, 1991:
635         fixed storage leak in freefa, failing to recover [N]CCL.
636         thanks to Bill Jones (jones@cs.usask.ca)
638 Nov 19, 1991:
639         use RAND_MAX instead of literal in builtin().
641 Nov 12, 1991:
642         cranked up some fixed-size arrays in b.c, and added a test for
643         overflow in penter.  thanks to mark larsen.
645 Sep 24, 1991:
646         increased buffer in gsub.  a very crude fix to a general problem.
647         and again on Sep 26.
649 Aug 18, 1991:
650         enforce variable name syntax for commandline variables: has to
651         start with letter or _.
653 Jul 27, 1991:
654         allow newline after ; in for statements.
656 Jul 21, 1991:
657         fixed so that in self-assignment like $1=$1, side effects
658         like recomputing $0 take place.  (this is getting subtle.)
660 Jun 30, 1991:
661         better test for detecting too-long output record.
663 Jun 2, 1991:
664         better defense against very long printf strings.
665         made break and continue illegal outside of loops.
667 May 13, 1991:
668         removed extra arg on gettemp, tempfree.  minor error message rewording.
670 May 6, 1991:
671         fixed silly bug in hex parsing in hexstr().
672         removed an apparently unnecessary test in isnumber().
673         warn about weird printf conversions.
674         fixed unchecked array overwrite in relex().
676         changed for (i in array) to access elements in sorted order.
677         then unchanged it -- it really does run slower in too many cases.
678         left the code in place, commented out.
680 Feb 10, 1991:
681         check error status on all writes, to avoid banging on full disks.
683 Jan 28, 1991:
684         awk -f - reads the program from stdin.
686 Jan 11, 1991:
687         failed to set numeric state on $0 in cmd|getline context in run.c.
689 Nov 2, 1990:
690         fixed sleazy test for integrality in getsval;  use modf.
692 Oct 29, 1990:
693         fixed sleazy buggy code in lib.c that looked (incorrectly) for
694         too long input lines.
696 Oct 14, 1990:
697         fixed the bug on p. 198 in which it couldn't deduce that an
698         argument was an array in some contexts.  replaced the error
699         message in intest() by code that damn well makes it an array.
701 Oct 8, 1990:
702         fixed horrible bug:  types and values were not preserved in
703         some kinds of self-assignment. (in assign().)
705 Aug 24, 1990:
706         changed NCHARS to 256 to handle 8-bit characters in strings
707         presented to match(), etc.
709 Jun 26, 1990:
710         changed struct rrow (awk.h) to use long instead of int for lval,
711         since cfoll() stores a pointer in it.  now works better when int's
712         are smaller than pointers!
714 May 6, 1990:
715         AVA fixed the grammar so that ! is uniformly of the same precedence as
716         unary + and -.  This renders illegal some constructs like !x=y, which
717         now has to be parenthesized as !(x=y), and makes others work properly:
718         !x+y is (!x)+y, and x!y is x !y, not two pattern-action statements.
719         (These problems were pointed out by Bob Lenk of Posix.)
721         Added \x to regular expressions (already in strings).
722         Limited octal to octal digits; \8 and \9 are not octal.
723         Centralized the code for parsing escapes in regular expressions.
724         Added a bunch of tests to T.re and T.sub to verify some of this.
726 Feb 9, 1990:
727         fixed null pointer dereference bug in main.c:  -F[nothing].  sigh.
729         restored srand behavior:  it returns the current seed.
731 Jan 18, 1990:
732         srand now returns previous seed value (0 to start).
734 Jan 5, 1990:
735         fix potential problem in tran.c -- something was freed,
736         then used in freesymtab.
738 Oct 18, 1989:
739         another try to get the max number of open files set with
740         relatively machine-independent code.
742         small fix to input() in case of multiple reads after EOF.
744 Oct 11, 1989:
745         FILENAME is now defined in the BEGIN block -- too many old
746         programs broke.
748         "-" means stdin in getline as well as on the commandline.
750         added a bunch of casts to the code to tell the truth about
751         char * vs. unsigned char *, a right royal pain.  added a
752         setlocale call to the front of main, though probably no one
753         has it usefully implemented yet.
755 Aug 24, 1989:
756         removed redundant relational tests against nullnode if parse
757         tree already had a relational at that point.
759 Aug 11, 1989:
760         fixed bug:  commandline variable assignment has to look like
761         var=something.  (consider the man page for =, in file =.1)
763         changed number of arguments to functions to static arrays
764         to avoid repeated malloc calls.
766 Aug 2, 1989:
767         restored -F (space) separator
769 Jul 30, 1989:
770         added -v x=1 y=2 ... for immediate commandline variable assignment;
771         done before the BEGIN block for sure.  they have to precede the
772         program if the program is on the commandline.
773         Modified Aug 2 to require a separate -v for each assignment.
775 Jul 10, 1989:
776         fixed ref-thru-zero bug in environment code in tran.c
778 Jun 23, 1989:
779         add newline to usage message.
781 Jun 14, 1989:
782         added some missing ansi printf conversion letters: %i %X %E %G.
783         no sensible meaning for h or L, so they may not do what one expects.
785         made %* conversions work.
787         changed x^y so that if n is a positive integer, it's done
788         by explicit multiplication, thus achieving maximum accuracy.
789         (this should be done by pow() but it seems not to be locally.)
790         done to x ^= y as well.
792 Jun 4, 1989:
793         ENVIRON array contains environment: if shell variable V=thing,
794                 ENVIRON["V"] is "thing"
796         multiple -f arguments permitted.  error reporting is naive.
797         (they were permitted before, but only the last was used.)
799         fixed a really stupid botch in the debugging macro dprintf
801         fixed order of evaluation of commandline assignments to match
802         what the book claims:  an argument of the form x=e is evaluated
803         at the time it would have been opened if it were a filename (p 63).
804         this invalidates the suggested answer to ex 4-1 (p 195).
806         removed some code that permitted -F (space) fieldseparator,
807         since it didn't quite work right anyway.  (restored aug 2)
809 Apr 27, 1989:
810         Line number now accumulated correctly for comment lines.
812 Apr 26, 1989:
813         Debugging output now includes a version date,
814         if one compiles it into the source each time.
816 Apr 9, 1989:
817         Changed grammar to prohibit constants as 3rd arg of sub and gsub;
818         prevents class of overwriting-a-constant errors.  (Last one?)
819         This invalidates the "banana" example on page 43 of the book.
821         Added \a ("alert"), \v (vertical tab), \xhhh (hexadecimal),
822         as in ANSI, for strings.  Rescinded the sloppiness that permitted
823         non-octal digits in \ooo.  Warning:  not all compilers and libraries
824         will be able to deal with \x correctly.
826 Jan 9, 1989:
827         Fixed bug that caused tempcell list to contain a duplicate.
828         The fix is kludgy.
830 Dec 17, 1988:
831         Catches some more commandline errors in main.
832         Removed redundant decl of modf in run.c (confuses some compilers).
833         Warning:  there's no single declaration of malloc, etc., in awk.h
834         that seems to satisfy all compilers.
836 Dec 7, 1988:
837         Added a bit of code to error printing to avoid printing nulls.
838         (Not clear that it actually would.)
840 Nov 27, 1988:
841         With fear and trembling, modified the grammar to permit
842         multiple pattern-action statements on one line without
843         an explicit separator.  By definition, this capitulation
844         to the ghost of ancient implementations remains undefined
845         and thus subject to change without notice or apology.
846         DO NOT COUNT ON IT.
848 Oct 30, 1988:
849         Fixed bug in call() that failed to recover storage.
851         A warning is now generated if there are more arguments
852         in the call than in the definition (in lieu of fixing
853         another storage leak).
855 Oct 20, 1988:
856         Fixed %c:  if expr is numeric, use numeric value;
857         otherwise print 1st char of string value.  still
858         doesn't work if the value is 0 -- won't print \0.
860         Added a few more checks for running out of malloc.
862 Oct 12, 1988:
863         Fixed bug in call() that freed local arrays twice.
865         Fixed to handle deletion of non-existent array right;
866         complains about attempt to delete non-array element.
868 Sep 30, 1988:
869         Now guarantees to evaluate all arguments of built-in
870         functions, as in C;  the appearance is that arguments
871         are evaluated before the function is called.  Places
872         affected are sub (gsub was ok), substr, printf, and
873         all the built-in arithmetic functions in bltin().
874         A warning is generated if a bltin() is called with
875         the wrong number of arguments.
877         This requires changing makeprof on p167 of the book.
879 Aug 23, 1988:
880         setting FILENAME in BEGIN caused core dump, apparently
881         because it was freeing space not allocated by malloc.
883 July 24, 1988:
884         fixed egregious error in toupper/tolower functions.
885         still subject to rescinding, however.
887 July 2, 1988:
888         flush stdout before opening file or pipe
890 July 2, 1988:
891         performance bug in b.c/cgoto(): not freeing some sets of states.
892         partial fix only right now, and the number of states increased
893         to make it less obvious.
895 June 1, 1988:
896         check error status on close
898 May 28, 1988:
899         srand returns seed value it's using.
900         see 1/18/90
902 May 22, 1988:
903         Removed limit on depth of function calls.
905 May 10, 1988:
906         Fixed lib.c to permit _ in commandline variable names.
908 Mar 25, 1988:
909         main.c fixed to recognize -- as terminator of command-
910         line options.  Illegal options flagged.
911         Error reporting slightly cleaned up.
913 Dec 2, 1987:
914         Newer C compilers apply a strict scope rule to extern
915         declarations within functions.  Two extern declarations in
916         lib.c and tran.c have been moved to obviate this problem.
918 Oct xx, 1987:
919         Reluctantly added toupper and tolower functions.
920         Subject to rescinding without notice.
922 Sep 17, 1987:
923         Error-message printer had printf(s) instead of
924         printf("%s",s);  got core dumps when the message
925         included a %.
927 Sep 12, 1987:
928         Very long printf strings caused core dump;
929         fixed aprintf, asprintf, format to catch them.
930         Can still get a core dump in printf itself.