shithub: trueawk

Download patch

ref: 1164fa7ace1beb249c885a1d1c9b6f3eb131e8bb
parent: 115fac05872c0def5dbc9959a3c7a4d078c454c5
parent: f25e845cf7a09d7b43c7a07e535a2e8d7f63aee1
author: onetrueawk <bwkster@gmail.com>
date: Sun Mar 3 10:10:03 EST 2019

Merge pull request #31 from arnoldrobbins/master

Make getline handle numeric strings, and update FIXES

--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
 	* REGRESS: Check for existence of a.out. If not there, run
--- a/FIXES
+++ b/FIXES
@@ -25,6 +25,16 @@
 This file lists all bug fixes, changes, etc., made since the AWK book
 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:
 	Added test in maketab.c to prevent generating a proctab entry
 	for YYSTYPE_IS_DEFINED.  It was harmless but some gcc settings
--- a/bugs-fixed/README
+++ b/bugs-fixed/README
@@ -51,4 +51,7 @@
 from the freed memory and possibly produce incorrect results (depending
 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.
--- /dev/null
+++ b/bugs-fixed/getline-numeric.awk
@@ -1,0 +1,6 @@
+{
+    print $0, ($0 <= 50 ? "<=" : ">"), 50
+    getline dd < ARGV[1]
+    print dd, (dd <= 50 ? "<=" : ">"), 50
+    if (dd == $0) print "same"
+}
--- /dev/null
+++ b/bugs-fixed/getline-numeric.bad
@@ -1,0 +1,3 @@
+120 > 50
+120 <= 50
+same
--- /dev/null
+++ b/bugs-fixed/getline-numeric.in
@@ -1,0 +1,1 @@
+120
--- /dev/null
+++ b/bugs-fixed/getline-numeric.ok
@@ -1,0 +1,3 @@
+120 > 50
+120 > 50
+same
--- a/main.c
+++ b/main.c
@@ -22,7 +22,7 @@
 THIS SOFTWARE.
 ****************************************************************/
 
-const char	*version = "version 20180827";
+const char	*version = "version 20190125";
 
 #define DEBUG
 #include <stdio.h>
--- a/run.c
+++ b/run.c
@@ -425,6 +425,10 @@
 		} else if (a[0] != NULL) {	/* getline var <file */
 			x = execute(a[0]);
 			setsval(x, buf);
+			if (is_number(x->sval)) {
+				x->fval = atof(x->sval);
+				x->tval |= NUM;
+			}
 			tempfree(x);
 		} else {			/* getline <file */
 			setsval(fldtab[0], buf);
@@ -440,6 +444,10 @@
 			n = getrec(&buf, &bufsize, 0);
 			x = execute(a[0]);
 			setsval(x, buf);
+			if (is_number(x->sval)) {
+				x->fval = atof(x->sval);
+				x->tval |= NUM;
+			}
 			tempfree(x);
 		}
 	}
--