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