Merge remote-tracking branch 'upstream/master' into interval-expr

main.c: bump version to 20190305
This commit is contained in:
Martijn Dekker 2019-03-05 03:45:40 +01:00
commit e6ecf52e04
13 changed files with 61 additions and 7 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
a.out
maketab
proctab.c
ytab.c
ytab.h
*.o

View File

@ -1,3 +1,12 @@
2019-01-26 Arnold D. Robbins <arnold@skeeve.com>
* main.c (version): Updated.
2019-01-25 Arnold D. Robbins <arnold@skeeve.com>
* run.c (awkgetline): Check for numeric value in all getline
variants. See the numeric-getline.* files in bugs-fixed directory.
2018-08-29 Arnold D. Robbins <arnold@skeeve.com> 2018-08-29 Arnold D. Robbins <arnold@skeeve.com>
* REGRESS: Check for existence of a.out. If not there, run * REGRESS: Check for existence of a.out. If not there, run

12
FIXES
View File

@ -25,11 +25,21 @@ 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.
Jan 23, 2019: Mar 5, 2019:
Added support for POSIX-standard interval expressions (a.k.a. Added support for POSIX-standard interval expressions (a.k.a.
bounds, a.k.a. repetition expressions) in regular expressions, bounds, a.k.a. repetition expressions) in regular expressions,
backported (via NetBSD) from Apple awk-24 (20070501). backported (via NetBSD) from Apple awk-24 (20070501).
Jan 25, 2019:
Make getline handle numeric strings properly in all cases.
(Thanks, Arnold.)
Jan 21, 2019:
Merged a number of small fixes from GitHub pull requests.
Thanks to GitHub users Arnold Robbins (arnoldrobbins),
Cody Mello (melloc) and Christoph Junghans (junghans).
PR numbers: 13-21, 23, 24, 27.
Oct 25, 2018: Oct 25, 2018:
Added test in maketab.c to prevent generating a proctab entry Added test in maketab.c to prevent generating a proctab entry
for YYSTYPE_IS_DEFINED. It was harmless but some gcc settings for YYSTYPE_IS_DEFINED. It was harmless but some gcc settings

3
b.c
View File

@ -27,6 +27,7 @@ THIS SOFTWARE.
#define DEBUG #define DEBUG
#include <ctype.h> #include <ctype.h>
#include <limits.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
@ -970,7 +971,7 @@ rescan:
* not without first adapting the entire * not without first adapting the entire
* program to track each string's length. * program to track each string's length.
*/ */
for (i = 1; i < NCHARS; i++) { for (i = 1; i <= UCHAR_MAX; i++) {
if (!adjbuf((char **) &buf, &bufsz, bp-buf+1, 100, (char **) &bp, "relex2")) if (!adjbuf((char **) &buf, &bufsz, bp-buf+1, 100, (char **) &bp, "relex2"))
FATAL("out of space for reg expr %.10s...", lastre); FATAL("out of space for reg expr %.10s...", lastre);
if (cc->cc_func(i)) { if (cc->cc_func(i)) {

View File

@ -51,4 +51,7 @@ array passed as the second argument, then split() would previously read
from the freed memory and possibly produce incorrect results (depending from the freed memory and possibly produce incorrect results (depending
on the system's malloc()/free() behaviour.) on the system's malloc()/free() behaviour.)
15. getline-numeric: The `getline xx < file' syntax did not check if
values were numeric, in discordance from POSIX. Test case adapted from
one posted by Ben Bacarisse <ben.usenet@bsb.me.uk> in comp.lang.awk,
January 2019.

View File

@ -0,0 +1,6 @@
{
print $0, ($0 <= 50 ? "<=" : ">"), 50
getline dd < ARGV[1]
print dd, (dd <= 50 ? "<=" : ">"), 50
if (dd == $0) print "same"
}

View File

@ -0,0 +1,3 @@
120 > 50
120 <= 50
same

View File

@ -0,0 +1 @@
120

View File

@ -0,0 +1,3 @@
120 > 50
120 > 50
same

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 20190123"; const char *version = "version 20190305";
#define DEBUG #define DEBUG
#include <stdio.h> #include <stdio.h>

View File

@ -67,7 +67,7 @@ y%.c y%.h: awk.h proto.h awkgram.y
ytab.h: ytab.c ytab.h: ytab.c
proctab.c: maketab proctab.c: maketab
./maketab >proctab.c ./maketab ytab.h >proctab.c
maketab: ytab.h maketab.c maketab: ytab.h maketab.c
$(CC) $(CFLAGS) maketab.c -o maketab $(CC) $(CFLAGS) maketab.c -o maketab

View File

@ -125,8 +125,12 @@ int main(int argc, char *argv[])
for (i = SIZE; --i >= 0; ) for (i = SIZE; --i >= 0; )
names[i] = ""; names[i] = "";
if ((fp = fopen("ytab.h", "r")) == NULL) { if (argc != 2) {
fprintf(stderr, "maketab can't open ytab.h!\n"); fprintf(stderr, "usage: maketab YTAB_H\n");
exit(1);
}
if ((fp = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "maketab can't open %s!\n", argv[1]);
exit(1); exit(1);
} }
printf("static char *printname[%d] = {\n", SIZE); printf("static char *printname[%d] = {\n", SIZE);

8
run.c
View File

@ -425,6 +425,10 @@ Cell *awkgetline(Node **a, int n) /* get next line from specific input */
} else if (a[0] != NULL) { /* getline var <file */ } else if (a[0] != NULL) { /* getline var <file */
x = execute(a[0]); x = execute(a[0]);
setsval(x, buf); setsval(x, buf);
if (is_number(x->sval)) {
x->fval = atof(x->sval);
x->tval |= NUM;
}
tempfree(x); tempfree(x);
} else { /* getline <file */ } else { /* getline <file */
setsval(fldtab[0], buf); setsval(fldtab[0], buf);
@ -440,6 +444,10 @@ Cell *awkgetline(Node **a, int n) /* get next line from specific input */
n = getrec(&buf, &bufsize, 0); n = getrec(&buf, &bufsize, 0);
x = execute(a[0]); x = execute(a[0]);
setsval(x, buf); setsval(x, buf);
if (is_number(x->sval)) {
x->fval = atof(x->sval);
x->tval |= NUM;
}
tempfree(x); tempfree(x);
} }
} }