diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | field.c | 13 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/Makefile.am | 9 | ||||
-rw-r--r-- | test/Makefile.in | 14 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/fpat7.awk | 2 | ||||
-rw-r--r-- | test/fpat7.in | 1 | ||||
-rw-r--r-- | test/fpat7.ok | 1 |
9 files changed, 37 insertions, 18 deletions
@@ -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. @@ -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 |