aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--field.c13
-rw-r--r--pc/ChangeLog4
-rw-r--r--pc/Makefile.tst29
-rw-r--r--test/ChangeLog5
-rw-r--r--test/Makefile.am21
-rw-r--r--test/Makefile.in26
-rw-r--r--test/Maketests5
-rw-r--r--test/fpat2.awk11
-rw-r--r--test/fpat2.ok3
-rw-r--r--vms/ChangeLog4
-rw-r--r--vms/vmstest.com3
12 files changed, 101 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index 88443e2e..40775269 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu May 26 22:10:08 2011 Arnold D. Robbins <arnold@skeeve.com>
+
+ * field.c (get_field): Enhance logic for setting NF if we're
+ using FPAT to parse fields. Can end up with weird cases. Thanks
+ to Pat Rankin for pointing them out.
+
Mon May 23 22:06:13 2011 Arnold D. Robbins <arnold@skeeve.com>
* awkgram.y: Allow newline after comma in range patterns,
diff --git a/field.c b/field.c
index 8ede8744..151fea68 100644
--- a/field.c
+++ b/field.c
@@ -884,8 +884,19 @@ get_field(long requested, Func_ptr *assign)
* reference to the field and NF only gets set if the field
* is assigned to -- this case is handled below
*/
- if (parse_extent >= fields_arr[0]->stptr + fields_arr[0]->stlen)
+ 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 wierd, 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))
+ 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;
}
diff --git a/pc/ChangeLog b/pc/ChangeLog
index 8e255aab..c2ed1f0e 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,7 @@
+Thu May 26 22:12:28 2011 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.tst: Sync with mainline version.
+
Mon May 23 21:52:49 2011 Scott Deifik <scottd.mail@sbcglobal.net>
* Makefile.tst: Sync with mainline version.
diff --git a/pc/Makefile.tst b/pc/Makefile.tst
index ce2e6d24..920fa1a2 100644
--- a/pc/Makefile.tst
+++ b/pc/Makefile.tst
@@ -153,15 +153,16 @@ UNIX_TESTS = \
fflush getlnhd localenl pid pipeio1 pipeio2 poundbang space strftlng
GAWK_EXT_TESTS = \
- aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort backw \
- badargs beginfile1 binmode1 clos1way delsub devfd devfd1 devfd2 \
- dumpvars exit fieldwdth fpat1 fsfwfs funlen fwtest fwtest2 gensub \
- gensub2 getlndir gnuops2 gnuops3 gnureops icasefs icasers igncdym \
- igncfs ignrcas2 ignrcase indirectcall lint lintold lintwarn \
- manyfiles match1 match2 match3 mbstr1 nastyparm next nondec nondec2 \
- patsplit posix printfbad1 printfbad2 procinfs profile1 profile2 \
- profile3 rebuf regx8bit reint reint2 rsstart1 rsstart2 rsstart3 \
- rstest6 shadow sortfor sortu splitarg4 strftime strtonum switch2
+ aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort \
+ backw badargs beginfile1 binmode1 clos1way delsub devfd devfd1 \
+ devfd2 dumpvars exit fieldwdth fpat1 fpat2 fpatnull fsfwfs funlen \
+ fwtest fwtest2 gensub gensub2 getlndir gnuops2 gnuops3 gnureops \
+ icasefs icasers igncdym igncfs ignrcas2 ignrcase indirectcall lint \
+ lintold lintwarn manyfiles match1 match2 match3 mbstr1 nastyparm \
+ next nondec nondec2 patsplit posix printfbad1 printfbad2 procinfs \
+ profile1 profile2 profile3 rebuf regx8bit reint reint2 rsstart1 \
+ rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \
+ strtonum switch2
EXTRA_TESTS = inftest regtest
INET_TESTS = inetdayu inetdayt inetechu inetecht
@@ -1660,6 +1661,16 @@ fpat1:
@AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+fpat2:
+ @echo fpat2
+ @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+
+fpatnull:
+ @echo fpatnull
+ @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+
fsfwfs:
@echo fsfwfs
@AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/ChangeLog b/test/ChangeLog
index 0d4be5f3..f28153ab 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+Thu May 26 22:08:27 2011 Arnold D. Robbins <arnold@skeeve.com>
+
+ * fpat2.awk, fpat2.ok: New files. Thanks to Pat Rankin for the cases.
+ * Makefile.am (fpat2): New test.
+
Mon May 23 14:03:15 2011 Arnold D. Robbins <arnold@skeeve.com>
* fpatnull.awk, fpatnull.in, fpatnull.ok: New files.
diff --git a/test/Makefile.am b/test/Makefile.am
index fd34a059..065bff1d 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -226,6 +226,8 @@ EXTRA_DIST = \
fpat1.awk \
fpat1.in \
fpat1.ok \
+ fpat2.awk \
+ fpat2.ok \
fpatnull.awk \
fpatnull.in \
fpatnull.ok \
@@ -782,15 +784,16 @@ UNIX_TESTS = \
fflush getlnhd localenl pid pipeio1 pipeio2 poundbang space strftlng
GAWK_EXT_TESTS = \
- aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort backw \
- badargs beginfile1 binmode1 clos1way delsub devfd devfd1 devfd2 \
- dumpvars exit fieldwdth fpat1 fpatnull fsfwfs funlen fwtest fwtest2 \
- gensub gensub2 getlndir gnuops2 gnuops3 gnureops icasefs icasers \
- igncdym igncfs ignrcas2 ignrcase indirectcall lint lintold lintwarn \
- manyfiles match1 match2 match3 mbstr1 nastyparm next nondec nondec2 \
- patsplit posix printfbad1 printfbad2 procinfs profile1 profile2 \
- profile3 rebuf regx8bit reint reint2 rsstart1 rsstart2 rsstart3 \
- rstest6 shadow sortfor sortu splitarg4 strftime strtonum switch2
+ aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort \
+ backw badargs beginfile1 binmode1 clos1way delsub devfd devfd1 \
+ devfd2 dumpvars exit fieldwdth fpat1 fpat2 fpatnull fsfwfs funlen \
+ fwtest fwtest2 gensub gensub2 getlndir gnuops2 gnuops3 gnureops \
+ icasefs icasers igncdym igncfs ignrcas2 ignrcase indirectcall lint \
+ lintold lintwarn manyfiles match1 match2 match3 mbstr1 nastyparm \
+ next nondec nondec2 patsplit posix printfbad1 printfbad2 procinfs \
+ profile1 profile2 profile3 rebuf regx8bit reint reint2 rsstart1 \
+ rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \
+ strtonum switch2
EXTRA_TESTS = inftest regtest
diff --git a/test/Makefile.in b/test/Makefile.in
index 734f97a8..1fa42e36 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -411,6 +411,8 @@ EXTRA_DIST = \
fpat1.awk \
fpat1.in \
fpat1.ok \
+ fpat2.awk \
+ fpat2.ok \
fpatnull.awk \
fpatnull.in \
fpatnull.ok \
@@ -967,15 +969,16 @@ UNIX_TESTS = \
fflush getlnhd localenl pid pipeio1 pipeio2 poundbang space strftlng
GAWK_EXT_TESTS = \
- aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort backw \
- badargs beginfile1 binmode1 clos1way delsub devfd devfd1 devfd2 \
- dumpvars exit fieldwdth fpat1 fpatnull fsfwfs funlen fwtest fwtest2 \
- gensub gensub2 getlndir gnuops2 gnuops3 gnureops icasefs icasers \
- igncdym igncfs ignrcas2 ignrcase indirectcall lint lintold lintwarn \
- manyfiles match1 match2 match3 mbstr1 nastyparm next nondec nondec2 \
- patsplit posix printfbad1 printfbad2 procinfs profile1 profile2 \
- profile3 rebuf regx8bit reint reint2 rsstart1 rsstart2 rsstart3 \
- rstest6 shadow sortfor sortu splitarg4 strftime strtonum switch2
+ aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort \
+ backw badargs beginfile1 binmode1 clos1way delsub devfd devfd1 \
+ devfd2 dumpvars exit fieldwdth fpat1 fpat2 fpatnull fsfwfs funlen \
+ fwtest fwtest2 gensub gensub2 getlndir gnuops2 gnuops3 gnureops \
+ icasefs icasers igncdym igncfs ignrcas2 ignrcase indirectcall lint \
+ lintold lintwarn manyfiles match1 match2 match3 mbstr1 nastyparm \
+ next nondec nondec2 patsplit posix printfbad1 printfbad2 procinfs \
+ profile1 profile2 profile3 rebuf regx8bit reint reint2 rsstart1 \
+ rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \
+ strtonum switch2
EXTRA_TESTS = inftest regtest
INET_TESTS = inetdayu inetdayt inetechu inetecht
@@ -2624,6 +2627,11 @@ fpat1:
@AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+fpat2:
+ @echo fpat2
+ @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+
fpatnull:
@echo fpatnull
@AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 4e419a5c..7577b893 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -905,6 +905,11 @@ fpat1:
@AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+fpat2:
+ @echo fpat2
+ @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@
+
fpatnull:
@echo fpatnull
@AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/fpat2.awk b/test/fpat2.awk
new file mode 100644
index 00000000..aa9e6be5
--- /dev/null
+++ b/test/fpat2.awk
@@ -0,0 +1,11 @@
+BEGIN {
+ FPAT = " "
+ $0 = ""
+ print NF
+
+ $0 = "abc"
+ print NF
+
+ $0 = "a b c"
+ print NF
+}
diff --git a/test/fpat2.ok b/test/fpat2.ok
new file mode 100644
index 00000000..67bbf9c5
--- /dev/null
+++ b/test/fpat2.ok
@@ -0,0 +1,3 @@
+0
+0
+2
diff --git a/vms/ChangeLog b/vms/ChangeLog
index 960723c1..e12be78c 100644
--- a/vms/ChangeLog
+++ b/vms/ChangeLog
@@ -1,3 +1,7 @@
+Thu May 26 22:14:06 2011 Arnold D. Robbins <arnold@skeeve.com>
+
+ * vmstest.com (fpat2): New test.
+
Wed May 25 01:31:50 2011 Pat Rankin <rankin@pactechdata.com>
* gawk.hlp: Substantial updates, for first time in 8 years!
diff --git a/vms/vmstest.com b/vms/vmstest.com
index f3efcb53..717f8b9d 100644
--- a/vms/vmstest.com
+++ b/vms/vmstest.com
@@ -95,7 +95,7 @@ $gawk_ext: echo "gawk_ext... (gawk.extensions)"
$ list = "aadelete1 aadelete2 aarray1 aasort aasorti" -
+ " argtest arraysort backw badargs beginfile1 binmode1" -
+ " clos1way delsub devfd devfd1 devfd2 dumpvars exit" -
- + " fieldwdth fpat1 fpatnull funlen fsfwfs fwtest fwtest2" -
+ + " fieldwdth fpat1 fpat2 fpatnull funlen fsfwfs fwtest fwtest2" -
+ " gensub gensub2 getlndir gnuops2 gnuops3 gnureops" -
+ " icasefs icasers igncdym igncfs ignrcase ignrcas2"
$ gosub list_of_tests
@@ -289,6 +289,7 @@ $!!double2:
$dynlj:
$fnarydel:
$fnparydl:
+$fpat2:
$forref:
$forsimp:
$funsemnl: