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