aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--field.c13
-rw-r--r--test/ChangeLog5
-rw-r--r--test/Makefile.am9
-rw-r--r--test/Makefile.in14
-rw-r--r--test/Maketests5
-rw-r--r--test/fpat7.awk2
-rw-r--r--test/fpat7.in1
-rw-r--r--test/fpat7.ok1
9 files changed, 37 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 3bb08472..63c90b6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-03 Arnold D. Robbins <arnold@skeeve.com>
+
+ * field.c (get_field): Remove special case code for fpat_parse_field.
+ Fixes a bug reported by Ed Morton <mortoneccc@comcast.net.
+
2019-10-19 Arnold D. Robbins <arnold@skeeve.com>
* compile, depcomp: Update from GNULIB.
diff --git a/field.c b/field.c
index 8814233a..8c7fe18e 100644
--- a/field.c
+++ b/field.c
@@ -916,17 +916,6 @@ get_field(long requested, Func_ptr *assign)
*/
if (parse_extent == fields_arr[0]->stptr + fields_arr[0]->stlen)
NF = parse_high_water;
- else if (parse_field == fpat_parse_field) {
- /* FPAT parsing is weird, isolate the special cases */
- char *rec_start = fields_arr[0]->stptr;
- char *rec_end = fields_arr[0]->stptr + fields_arr[0]->stlen;
-
- if ( parse_extent > rec_end
- || (parse_extent > rec_start && parse_extent < rec_end && requested == UNLIMITED-1))
- NF = parse_high_water;
- else if (parse_extent == rec_start) /* could be no match for FPAT */
- NF = 0;
- }
if (requested == UNLIMITED - 1) /* UNLIMITED-1 means set NF */
requested = parse_high_water;
}
@@ -1566,7 +1555,7 @@ incr_scan(char **scanp, size_t len, mbstate_t *mbs)
* field_found = match(substr(string, parse_start), pattern)
*
* # check for an invalid null field and retry one character away
- * if (nf > 0 && field_found && RSTART==1 && RLENGTH==0) {
+ * if (nf > 0 && field_found && RSTART == 1 && RLENGTH == 0) {
* parse_start++
* field_found = match(substr(string, parse_start), pattern)
* }
diff --git a/test/ChangeLog b/test/ChangeLog
index 0ec118e4..cd503c39 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-03 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (EXTRA_DISTS): New test, fpat7.
+ * fpat7.awk, fpat7.ok, fpat7.in: New files.
+
2019-10-13 Arnold D. Robbins <arnold@skeeve.com>
* Makefile.am (EXTRA_DISTS): New tests, typedregex5 and
diff --git a/test/Makefile.am b/test/Makefile.am
index 053ff545..84a71bc8 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -366,6 +366,9 @@ EXTRA_DIST = \
fpat6.awk \
fpat6.in \
fpat6.ok \
+ fpat7.awk \
+ fpat7.in \
+ fpat7.ok \
fpatnull.awk \
fpatnull.in \
fpatnull.ok \
@@ -1368,9 +1371,9 @@ GAWK_EXT_TESTS = \
dbugeval dbugeval2 dbugeval3 dbugtypedre1 dbugtypedre2 delsub \
devfd devfd1 devfd2 dfacheck1 dumpvars \
errno exit \
- fieldwdth forcenum fpat1 fpat2 fpat3 fpat4 fpat5 fpat6 fpatnull fsfwfs \
- funlen functab1 functab2 functab3 fwtest fwtest2 fwtest3 fwtest4 \
- fwtest5 fwtest6 fwtest7 fwtest8 \
+ fieldwdth forcenum fpat1 fpat2 fpat3 fpat4 fpat5 fpat6 fpat7 fpatnull \
+ fsfwfs funlen functab1 functab2 functab3 \
+ fwtest fwtest2 fwtest3 fwtest4 fwtest5 fwtest6 fwtest7 fwtest8 \
genpot gensub gensub2 gensub3 getlndir gnuops2 gnuops3 gnureops gsubind \
icasefs icasers id igncdym igncfs ignrcas2 ignrcas4 ignrcase incdupe \
incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 include include2 \
diff --git a/test/Makefile.in b/test/Makefile.in
index 357f3b16..7bbacf1a 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -625,6 +625,9 @@ EXTRA_DIST = \
fpat6.awk \
fpat6.in \
fpat6.ok \
+ fpat7.awk \
+ fpat7.in \
+ fpat7.ok \
fpatnull.awk \
fpatnull.in \
fpatnull.ok \
@@ -1627,9 +1630,9 @@ GAWK_EXT_TESTS = \
dbugeval dbugeval2 dbugeval3 dbugtypedre1 dbugtypedre2 delsub \
devfd devfd1 devfd2 dfacheck1 dumpvars \
errno exit \
- fieldwdth forcenum fpat1 fpat2 fpat3 fpat4 fpat5 fpat6 fpatnull fsfwfs \
- funlen functab1 functab2 functab3 fwtest fwtest2 fwtest3 fwtest4 \
- fwtest5 fwtest6 fwtest7 fwtest8 \
+ fieldwdth forcenum fpat1 fpat2 fpat3 fpat4 fpat5 fpat6 fpat7 fpatnull \
+ fsfwfs funlen functab1 functab2 functab3 \
+ fwtest fwtest2 fwtest3 fwtest4 fwtest5 fwtest6 fwtest7 fwtest8 \
genpot gensub gensub2 gensub3 getlndir gnuops2 gnuops3 gnureops gsubind \
icasefs icasers id igncdym igncfs ignrcas2 ignrcas4 ignrcase incdupe \
incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 include include2 \
@@ -4250,6 +4253,11 @@ fpat6:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+fpat7:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
fpatnull:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 3e443f54..627d6ecf 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1416,6 +1416,11 @@ fpat6:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+fpat7:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
fpatnull:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/fpat7.awk b/test/fpat7.awk
new file mode 100644
index 00000000..9b8a6775
--- /dev/null
+++ b/test/fpat7.awk
@@ -0,0 +1,2 @@
+BEGIN { FPAT = "[^,]*" }
+{ print $1, $2 }
diff --git a/test/fpat7.in b/test/fpat7.in
new file mode 100644
index 00000000..0cbe3bdb
--- /dev/null
+++ b/test/fpat7.in
@@ -0,0 +1 @@
+,b
diff --git a/test/fpat7.ok b/test/fpat7.ok
new file mode 100644
index 00000000..64e2aadd
--- /dev/null
+++ b/test/fpat7.ok
@@ -0,0 +1 @@
+ b