Merge pull request #31 from arnoldrobbins/master

Make getline handle numeric strings, and update FIXES
This commit is contained in:
onetrueawk 2019-03-03 15:10:03 -05:00 committed by GitHub
commit 1164fa7ace
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 45 additions and 2 deletions

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

10
FIXES
View File

@ -25,6 +25,16 @@ 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 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

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

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);
} }
} }