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