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