← Commit list

df8066a78

Denys Vlasenko
Denys Vlasenko
2012-07-11
SUCCESS Duration: 176s

Subject

awk: fix FS assignment behavior. Closes 5108

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

editors/awk.c+12 -0
@@ -1812,6 +1812,18 @@ static void handle_special(var *v)
is_f0_split = FALSE;
} else if (v == intvar[FS]) {
+ /*
+ * The POSIX-2008 standard says that changing FS should have no effect on the
+ * current input line, but only on the next one. The language is:
+ *
+ * > Before the first reference to a field in the record is evaluated, the record
+ * > shall be split into fields, according to the rules in Regular Expressions,
+ * > using the value of FS that was current at the time the record was read.
+ *
+ * So, split up current line before assignment to FS:
+ */
+ split_f0();
+
mk_splitter(getvar_s(v), &fsplitter);
} else if (v == intvar[RS]) {
testsuite/awk.tests+7 -0
@@ -217,4 +217,11 @@ end d
testing "awk handles empty ()" \
"awk 'BEGIN {print()}' 2>&1" "awk: cmd. line:1: Empty sequence\n" "" ""
+testing "awk FS assignment" "awk '{FS=\":\"; print \$1}'" \
+ "a:b\ne\n" \
+ "" \
+ "a:b c:d\ne:f g:h"
+
+# testing "description" "command" "result" "infile" "stdin"
+
exit $FAILCOUNT