|
|
1.1 ! root 1: Sep 12, 1987: ! 2: Very long printf strings caused core dump; ! 3: fixed aprintf, asprintf, format to catch them. ! 4: Can still get a core dump in printf itself. ! 5: ! 6: Sep 17, 1987: ! 7: Error-message printer had printf(s) instead of ! 8: printf("%s",s); got core dumps when the message ! 9: included a %. ! 10: ! 11: Oct xx, 1987: ! 12: Reluctantly added toupper and tolower functions. ! 13: Subject to rescinding without notice. ! 14: ! 15: Dec 2, 1987: ! 16: Newer C compilers apply a strict scope rule to extern ! 17: declarations within functions. Two extern declarations in ! 18: lib.c and tran.c have been moved to obviate this problem. ! 19: ! 20: Mar 25, 1988: ! 21: main.c fixed to recognize -- as terminator of command- ! 22: line options. Illegal options flagged. ! 23: Error reporting slightly cleaned up. ! 24: ! 25: May 10, 1988: ! 26: Fixed lib.c to permit _ in commandline variable names. ! 27: ! 28: May 22, 1988: ! 29: Removed limit on depth of function calls. ! 30: ! 31: May 28, 1988: ! 32: srand returns seed value it's using. ! 33: see 1/18/90 ! 34: ! 35: June 1, 1988: ! 36: check error status on close ! 37: ! 38: July 2, 1988: ! 39: performance bug in b.c/cgoto(): not freeing some sets of states. ! 40: partial fix only right now, and the number of states increased ! 41: to make it less obvious. ! 42: ! 43: July 2, 1988: ! 44: flush stdout before opening file or pipe ! 45: ! 46: July 24, 1988: ! 47: fixed egregious error in toupper/tolower functions. ! 48: still subject to rescinding, however. ! 49: ! 50: Aug 23, 1988: ! 51: setting FILENAME in BEGIN caused core dump, apparently ! 52: because it was freeing space not allocated by malloc. ! 53: ! 54: Sep 30, 1988: ! 55: Now guarantees to evaluate all arguments of built-in ! 56: functions, as in C; the appearance is that arguments ! 57: are evaluated before the function is called. Places ! 58: affected are sub (gsub was ok), substr, printf, and ! 59: all the built-in arithmetic functions in bltin(). ! 60: A warning is generated if a bltin() is called with ! 61: the wrong number of arguments. ! 62: ! 63: This requires changing makeprof on p167 of the book. ! 64: ! 65: Oct 12, 1988: ! 66: Fixed bug in call() that freed local arrays twice. ! 67: ! 68: Fixed to handle deletion of non-existent array right; ! 69: complains about attempt to delete non-array element. ! 70: ! 71: Oct 20, 1988: ! 72: Fixed %c: if expr is numeric, use numeric value; ! 73: otherwise print 1st char of string value. ! 74: ! 75: Added a few more checks for running out of malloc. ! 76: ! 77: Oct 30, 1988: ! 78: Fixed bug in call() that failed to recover storage. ! 79: ! 80: A warning is now generated if there are more arguments ! 81: in the call than in the definition (in lieu of fixing ! 82: another storage leak). ! 83: ! 84: Nov 27, 1988: ! 85: With fear and trembling, modified the grammar to permit ! 86: multiple pattern-action statements on one line without ! 87: an explicit separator. By definition, this capitulation ! 88: to the ghost of ancient implementations remains undefined ! 89: and thus subject to change without notice or apology. ! 90: DO NOT COUNT ON IT. ! 91: ! 92: Dec 7, 1988: ! 93: Added a bit of code to error printing to avoid printing nulls. ! 94: (Not clear that it actually would.) ! 95: ! 96: Dec 17, 1988: ! 97: Catches some more commandline errors in main. ! 98: Removed redundant decl of modf in run.c (confuses some compilers). ! 99: Warning: there's no single declaration of malloc, etc., in awk.h ! 100: that seems to satisfy all compilers. ! 101: ! 102: Jan 9, 1989: ! 103: Fixed bug that caused tempcell list to contain a duplicate. ! 104: The fix is kludgy. ! 105: ! 106: Apr 9, 1989: ! 107: Changed grammar to prohibit constants as 3rd arg of sub and gsub; ! 108: prevents class of overwriting-a-constant errors. (Last one?) ! 109: This invalidates the "banana" example on page 43 of the book. ! 110: ! 111: Added \a ("alert"), \v (vertical tab), \xhhh (hexadecimal), ! 112: as in ANSI, for strings. Rescinded the sloppiness that permitted ! 113: non-octal digits in \ooo. Warning: not all compilers and libraries ! 114: will be able to deal with \x correctly. ! 115: ! 116: Apr 26, 1989: ! 117: Debugging output now includes a version date, ! 118: if one compiles it into the source each time. ! 119: ! 120: Apr 27, 1989: ! 121: Line number now accumulated correctly for comment lines. ! 122: ! 123: Jun 4, 1989: ! 124: ENVIRON array contains environment: if shell variable V=thing, ! 125: ENVIRON["V"] is "thing" ! 126: ! 127: multiple -f arguments permitted. error reporting is naive. ! 128: (they were permitted before, but only the last was used.) ! 129: ! 130: fixed a really stupid botch in the debugging macro dprintf ! 131: ! 132: fixed order of evaluation of commandline assignments to match ! 133: what the book claims: an argument of the form x=e is evaluated ! 134: at the time it would have been opened if it were a filename (p 63). ! 135: this invalidates the suggested answer to ex 4-1 (p 195). ! 136: ! 137: removed some code that permitted -F (space) fieldseparator, ! 138: since it didn't quite work right anyway. (restored aug 2) ! 139: ! 140: Jun 14, 1989: ! 141: added some missing ansi printf conversion letters: %i %X %E %G. ! 142: no sensible meaning for h or L, so they may not do what one expects. ! 143: ! 144: made %* conversions work. ! 145: ! 146: changed x^y so that if n is a positive integer, it's done ! 147: by explicit multiplication, thus achieving maximum accuracy. ! 148: (this should be done by pow() but it seems not to be locally.) ! 149: done to x ^= y as well. ! 150: ! 151: Jun 23, 1989: ! 152: add newline to usage message. ! 153: ! 154: Jul 10, 1989: ! 155: fixed ref-thru-zero bug in environment code in tran.c ! 156: ! 157: Jul 30, 1989: ! 158: added -v x=1 y=2 ... for immediate commandline variable assignment; ! 159: done before the BEGIN block for sure. they have to precede the ! 160: program if the program is on the commandline. ! 161: Modified Aug 2 to require a separate -v for each assignment. ! 162: ! 163: Aug 2, 1989: ! 164: restored -F (space) separator ! 165: ! 166: Aug 11, 1989: ! 167: fixed bug: commandline variable assignment has to look like ! 168: var=something. (consider the man page for =, in file =.1) ! 169: ! 170: changed number of arguments to functions to static arrays ! 171: to avoid repeated malloc calls. ! 172: ! 173: Aug 24, 1989: ! 174: removed redundant relational tests against nullnode if parse ! 175: tree already had a relational at that point. ! 176: ! 177: Oct 11, 1989: ! 178: FILENAME is now defined in the BEGIN block -- too many old ! 179: programs broke. ! 180: ! 181: "-" means stdin in getline as well as on the commandline. ! 182: ! 183: added a bunch of casts to the code to tell the truth about ! 184: char * vs. unsigned char *, a right royal pain. added a ! 185: setlocale call to the front of main, though probably no one ! 186: has it usefully implemented yet. ! 187: ! 188: Oct 18, 1989: ! 189: another try to get the max number of open files set with ! 190: relatively machine-independent code. ! 191: ! 192: small fix to input() in case of multiple reads after EOF. ! 193: ! 194: Jan 5, 1990: ! 195: fix potential problem in tran.c -- something was freed, ! 196: then used in freesymtab. ! 197: ! 198: Jan 18, 1990: ! 199: srand now returns previous seed value (0 to start). ! 200: ! 201: Feb 9, 1990: ! 202: fixed null pointer dereference bug in main.c: -F[nothing]. sigh. ! 203: ! 204: restored srand behavior: it returns the current seed. ! 205: ! 206: May 6, 1990: ! 207: AVA fixed the grammar so that ! is uniformly of the same precedence as ! 208: unary + and -. This renders illegal some constructs like !x=y, which ! 209: now has to be parenthesized as !(x=y), and makes others work properly: ! 210: !x+y is (!x)+y, and x!y is x !y, not two pattern-action statements. ! 211: (These problems were pointed out by Bob Lenk of Posix.) ! 212: ! 213: Added \x to regular expressions (already in strings). ! 214: Limited octal to octal digits; \8 and \9 are not octal. ! 215: Centralized the code for parsing escapes in regular expressions. ! 216: Added a bunch of tests to T.re and T.sub to verify some of this. ! 217: ! 218: Jun 26, 1990: ! 219: changed struct rrow (awk.h) to use long instead of int for lval, ! 220: since cfoll() stores a pointer in it. now works better when int's ! 221: are smaller than pointers! ! 222: ! 223: Aug 24, 1990: ! 224: changed NCHARS to 256 to handle 8-bit characters in strings ! 225: presented to match(), etc. ! 226: ! 227: Oct 8, 1990: ! 228: fixed horrible bug: types and values were not preserved in ! 229: some kinds of self-assignment. (in assign().) ! 230: ! 231: Oct 14, 1990: ! 232: fixed the bug on p. 198 in which it couldn't deduce that an ! 233: argument was an array in some contexts. replaced the error ! 234: message in intest() by code that damn well makes it an array. ! 235: ! 236: Oct 29, 1990: ! 237: fixed sleazy buggy code in lib.c that looked (incorrectly) for ! 238: too long input lines. ! 239: ! 240: Nov 2, 1990: ! 241: fixed sleazy test for integrality in getsval; use modf. ! 242: ! 243: Jan 11, 1991: ! 244: failed to set numeric state on $0 in cmd|getline context in run.c. ! 245: ! 246: Jan 28, 1991: ! 247: awk -f - reads the program from stdin. ! 248: ! 249: Feb 10, 1991: ! 250: check error status on all writes, to avoid banging on full disks. ! 251: ! 252: May 6, 1991: ! 253: fixed silly bug in hex parsing in hexstr(). ! 254: removed an apparently unnecessary test in isnumber(). ! 255: warn about weird printf conversions. ! 256: fixed unchecked array overwrite in relex(). ! 257: ! 258: changed for (i in array) to access elements in sorted order. ! 259: then unchanged it -- it really does run slower in too many cases. ! 260: left the code in place, commented out. ! 261: ! 262: May 13, 1991: ! 263: removed extra arg on gettemp, tempfree. minor error message rewording. ! 264: ! 265: Jun 2, 1991: ! 266: better defense against very long printf strings. ! 267: made break and continue illegal outside of loops. ! 268: ! 269: Jun 30, 1991: ! 270: better test for detecting too-long output record. ! 271: ! 272: Jul 21, 1991: ! 273: fixed so that in self-assignment like $1=$1, side effects ! 274: like recomputing $0 take place. (this is getting subtle.) ! 275: ! 276: Jul 27, 1991: ! 277: allow newline after ; in for statements. ! 278: ! 279: Aug 18, 1991: ! 280: enforce variable name syntax for commandline variables: has to ! 281: start with letter or _. ! 282: ! 283: Sep 24, 1991: ! 284: increased buffer in gsub. a very crude fix to a general problem. ! 285: and again on Sep 26. ! 286: ! 287: Nov 12, 1991: ! 288: cranked up some fixed-size arrays in b.c, and added a test for ! 289: overflow in penter. thanks to mark larsen. ! 290: ! 291: Nov 19, 1991: ! 292: use RAND_MAX instead of literal in builtin(). ! 293: ! 294: Nov 30, 1991: ! 295: fixed storage leak in freefa, failing to recover [N]CCL. ! 296: thanks to Bill Jones ([email protected]) ! 297: ! 298: Dec 2, 1991: ! 299: die-casting time: converted to ansi C, installed that. ! 300: ! 301: Feb 20, 1992: ! 302: recompile after abortive changes; should be unchanged. ! 303: ! 304: Apr 12, 1992: ! 305: added explicit check for /dev/std(in,out,err) in redirection. ! 306: unlike gawk, no /dev/fd/n yet. ! 307: ! 308: added fflush(file/pipe) builtin. hard to test satisfactorily. ! 309: not posix. ! 310: ! 311: Apr 24, 1992: ! 312: remove redundant close of stdin when using -f -. ! 313: ! 314: got rid of core dump with -d; awk -d just prints date. ! 315: ! 316: May 31, 1992: ! 317: added -mr N and -mf N options: more record and fields. ! 318: these really ought to adjust automatically. ! 319: ! 320: cleaned up some error messages; "out of space" now means ! 321: malloc returned NULL in all cases. ! 322: ! 323: changed rehash so that if it runs out, it just returns; ! 324: things will continue to run slow, but maybe a bit longer.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.