Vendor import of bwk's 26-Nov-2009 release.

This commit is contained in:
Ruslan Ermilov 2010-01-09 23:04:24 +00:00
parent 2f77d60407
commit d9859a0e4b
9 changed files with 26 additions and 8 deletions

17
FIXES
View File

@ -25,6 +25,23 @@ THIS SOFTWARE.
This file lists all bug fixes, changes, etc., made since the AWK book This file lists all bug fixes, changes, etc., made since the AWK book
was sent to the printers in August, 1987. was sent to the printers in August, 1987.
Nov 26, 2009:
fixed a long-standing issue with when FS takes effect. a
change to FS is now noticed immediately for subsequent splits.
changed the name getline() to awkgetline() to avoid yet another
name conflict somewhere.
Feb 11, 2009:
temporarily for now defined HAS_ISBLANK, since that seems to
be the best way through the thicket. isblank arrived in C99,
but seems to be arriving at different systems at different
times.
Oct 8, 2008:
fixed typo in b.c that set tmpvec wrongly. no one had ever
run into the problem, apparently. thanks to alistair crooks.
Oct 23, 2007: Oct 23, 2007:
minor fix in lib.c: increase inputFS to 100, change malloc minor fix in lib.c: increase inputFS to 100, change malloc
for fields to n+1. for fields to n+1.

3
b.c
View File

@ -731,6 +731,7 @@ Node *unary(Node *np)
* to nelson beebe for the suggestion; let's see if it works everywhere. * to nelson beebe for the suggestion; let's see if it works everywhere.
*/ */
/* #define HAS_ISBLANK */
#ifndef HAS_ISBLANK #ifndef HAS_ISBLANK
int (isblank)(int c) int (isblank)(int c)
@ -876,7 +877,7 @@ int cgoto(fa *f, int s, int c)
if (q[j] >= maxsetvec) { if (q[j] >= maxsetvec) {
maxsetvec *= 4; maxsetvec *= 4;
setvec = (int *) realloc(setvec, maxsetvec * sizeof(int)); setvec = (int *) realloc(setvec, maxsetvec * sizeof(int));
tmpset = (int *) realloc(setvec, maxsetvec * sizeof(int)); tmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int));
if (setvec == 0 || tmpset == 0) if (setvec == 0 || tmpset == 0)
overflo("cgoto overflow"); overflo("cgoto overflow");
} }

1
lib.c
View File

@ -274,6 +274,7 @@ void fldbld(void) /* create fields from current record */
} }
fr = fields; fr = fields;
i = 0; /* number of fields accumulated here */ i = 0; /* number of fields accumulated here */
strcpy(inputFS, *FS);
if (strlen(inputFS) > 1) { /* it's a regular expression */ if (strlen(inputFS) > 1) { /* it's a regular expression */
i = refldbld(r, inputFS); i = refldbld(r, inputFS);
} else if ((sep = *inputFS) == ' ') { /* default whitespace */ } else if ((sep = *inputFS) == ' ') { /* default whitespace */

2
main.c
View File

@ -22,7 +22,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE. THIS SOFTWARE.
****************************************************************/ ****************************************************************/
const char *version = "version 20070501"; const char *version = "version 20091126";
#define DEBUG #define DEBUG
#include <stdio.h> #include <stdio.h>

View File

@ -31,7 +31,6 @@ CC = gcc -fprofile-arcs -ftest-coverage # then gcov f1.c; cat f1.c.gcov
CC = gcc -Wall -g CC = gcc -Wall -g
CC = cc CC = cc
CC = gcc -O4 CC = gcc -O4
CC = gcc -Wall -g
YACC = bison -y YACC = bison -y

View File

@ -102,7 +102,7 @@ struct xx
{ CALL, "call", "call" }, { CALL, "call", "call" },
{ ARG, "arg", "arg" }, { ARG, "arg", "arg" },
{ VARNF, "getnf", "NF" }, { VARNF, "getnf", "NF" },
{ GETLINE, "getline", "getline" }, { GETLINE, "awkgetline", "getline" },
{ 0, "", "" }, { 0, "", "" },
}; };

View File

@ -180,7 +180,7 @@ Cell *(*proctab[93])(Node **, int) = {
nullproc, /* NUMBER */ nullproc, /* NUMBER */
nullproc, /* STRING */ nullproc, /* STRING */
nullproc, /* REGEXPR */ nullproc, /* REGEXPR */
getline, /* GETLINE */ awkgetline, /* GETLINE */
substr, /* SUBSTR */ substr, /* SUBSTR */
split, /* SPLIT */ split, /* SPLIT */
jump, /* RETURN */ jump, /* RETURN */

View File

@ -149,7 +149,7 @@ extern Cell *call(Node **, int);
extern Cell *copycell(Cell *); extern Cell *copycell(Cell *);
extern Cell *arg(Node **, int); extern Cell *arg(Node **, int);
extern Cell *jump(Node **, int); extern Cell *jump(Node **, int);
extern Cell *getline(Node **, int); extern Cell *awkgetline(Node **, int);
extern Cell *getnf(Node **, int); extern Cell *getnf(Node **, int);
extern Cell *array(Node **, int); extern Cell *array(Node **, int);
extern Cell *awkdelete(Node **, int); extern Cell *awkdelete(Node **, int);

4
run.c
View File

@ -388,7 +388,7 @@ Cell *jump(Node **a, int n) /* break, continue, next, nextfile, return */
return 0; /* not reached */ return 0; /* not reached */
} }
Cell *getline(Node **a, int n) /* get next line from specific input */ Cell *awkgetline(Node **a, int n) /* get next line from specific input */
{ /* a[0] is variable, a[1] is operator, a[2] is filename */ { /* a[0] is variable, a[1] is operator, a[2] is filename */
Cell *r, *x; Cell *r, *x;
extern Cell **fldtab; extern Cell **fldtab;
@ -1159,11 +1159,11 @@ Cell *cat(Node **a, int q) /* a[0] cat a[1] */
x->sval, y->sval); x->sval, y->sval);
strcpy(s, x->sval); strcpy(s, x->sval);
strcpy(s+n1, y->sval); strcpy(s+n1, y->sval);
tempfree(x);
tempfree(y); tempfree(y);
z = gettemp(); z = gettemp();
z->sval = s; z->sval = s;
z->tval = STR; z->tval = STR;
tempfree(x);
return(z); return(z);
} }