aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2014-01-14 22:17:04 +0200
committerArnold D. Robbins <arnold@skeeve.com>2014-01-14 22:17:04 +0200
commitc338576a8fefa700cb989319d10d27f6f31e9b00 (patch)
treecbc1751f4f8088fcb0124bd5c994af2a035e39d2
parent2389064eb3fe7c5b2b144eb2f5d556a812ba1911 (diff)
downloadegawk-c338576a8fefa700cb989319d10d27f6f31e9b00.tar.gz
egawk-c338576a8fefa700cb989319d10d27f6f31e9b00.tar.bz2
egawk-c338576a8fefa700cb989319d10d27f6f31e9b00.zip
Bug fix to do_split().
-rw-r--r--ChangeLog6
-rw-r--r--field.c4
-rw-r--r--test/ChangeLog6
-rw-r--r--test/Makefile.am8
-rw-r--r--test/Makefile.in13
-rw-r--r--test/Maketests5
-rw-r--r--test/split_after_fpat.awk11
-rw-r--r--test/split_after_fpat.in1
-rw-r--r--test/split_after_fpat.ok4
9 files changed, 53 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 23afcf35..9f5954bb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-01-14 Arnold D. Robbins <arnold@skeeve.com>
+
+ * field.c (do_split): Make sure split() gets FS value if no
+ third arg even after FPAT was set. Thanks to Janis Papanagnou
+ for the report.
+
2014-01-13 Arnold D. Robbins <arnold@skeeve.com>
* README: Fix John Malmberg's email address.
diff --git a/field.c b/field.c
index 0a7cee8f..5a1bf562 100644
--- a/field.c
+++ b/field.c
@@ -1013,7 +1013,9 @@ do_split(int nargs)
return make_number((AWKNUM) 0);
}
- if ((sep->re_flags & FS_DFLT) != 0 && current_field_sep() != Using_FIELDWIDTHS && ! RS_is_null) {
+ if ( (sep->re_flags & FS_DFLT) != 0
+ && current_field_sep() == Using_FS
+ && ! RS_is_null) {
parseit = parse_field;
fs = force_string(FS_node->var_value);
rp = FS_regexp;
diff --git a/test/ChangeLog b/test/ChangeLog
index 81fed7c8..b5ff6e64 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,9 @@
+2014-01-14 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (split_after_fpat): New test.
+ * split_after_fpat.awk, split_after_fpat.ok,
+ split_after_fpat.in: New files.
+
2013-12-30 Arnold D. Robbins <arnold@skeeve.com>
* Makefile.am (ignrcas2): Change to use en_US.UTF-8; it
diff --git a/test/Makefile.am b/test/Makefile.am
index 371a13ea..e6dfea17 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,7 +1,7 @@
#
# test/Makefile.am --- automake input file for gawk
#
-# Copyright (C) 1988-2012 the Free Software Foundation, Inc.
+# Copyright (C) 1988-2014 the Free Software Foundation, Inc.
#
# This file is part of GAWK, the GNU implementation of the
# AWK Programming Language.
@@ -806,6 +806,9 @@ EXTRA_DIST = \
sortu.awk \
sortu.ok \
space.ok \
+ split_after_fpat.awk \
+ split_after_fpat.in \
+ split_after_fpat.ok \
splitarg4.awk \
splitarg4.in \
splitarg4.ok \
@@ -993,7 +996,8 @@ GAWK_EXT_TESTS = \
patsplit posix printfbad1 printfbad2 printfbad3 procinfs \
profile1 profile2 profile3 profile4 profile5 pty1 \
rebuf regx8bit reginttrad reint reint2 rsstart1 \
- rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \
+ rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \
+ splitarg4 strftime \
strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \
symtab7 symtab8 symtab9
diff --git a/test/Makefile.in b/test/Makefile.in
index c2efe1ed..8fe395ef 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -17,7 +17,7 @@
#
# test/Makefile.am --- automake input file for gawk
#
-# Copyright (C) 1988-2012 the Free Software Foundation, Inc.
+# Copyright (C) 1988-2014 the Free Software Foundation, Inc.
#
# This file is part of GAWK, the GNU implementation of the
# AWK Programming Language.
@@ -1052,6 +1052,9 @@ EXTRA_DIST = \
sortu.awk \
sortu.ok \
space.ok \
+ split_after_fpat.awk \
+ split_after_fpat.in \
+ split_after_fpat.ok \
splitarg4.awk \
splitarg4.in \
splitarg4.ok \
@@ -1238,7 +1241,8 @@ GAWK_EXT_TESTS = \
patsplit posix printfbad1 printfbad2 printfbad3 procinfs \
profile1 profile2 profile3 profile4 profile5 pty1 \
rebuf regx8bit reginttrad reint reint2 rsstart1 \
- rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \
+ rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \
+ splitarg4 strftime \
strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \
symtab7 symtab8 symtab9
@@ -3497,6 +3501,11 @@ sortu:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+split_after_fpat:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
splitarg4:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index df272ce8..b9b713c4 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1182,6 +1182,11 @@ sortu:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+split_after_fpat:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
splitarg4:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/split_after_fpat.awk b/test/split_after_fpat.awk
new file mode 100644
index 00000000..7e7cfd99
--- /dev/null
+++ b/test/split_after_fpat.awk
@@ -0,0 +1,11 @@
+BEGIN { FPAT = "\"[^\"]*\"" }
+
+{ print $1 }
+
+END { f("hi there") }
+
+function f (p, a, n, i)
+{
+ n = split(p,a)
+ print n ; for (i=1; i<=n; i++) print a[i]
+}
diff --git a/test/split_after_fpat.in b/test/split_after_fpat.in
new file mode 100644
index 00000000..1aeefd59
--- /dev/null
+++ b/test/split_after_fpat.in
@@ -0,0 +1 @@
+a"stuff"b
diff --git a/test/split_after_fpat.ok b/test/split_after_fpat.ok
new file mode 100644
index 00000000..5c284490
--- /dev/null
+++ b/test/split_after_fpat.ok
@@ -0,0 +1,4 @@
+"stuff"
+2
+hi
+there