summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--src/join.c12
-rwxr-xr-xtests/misc/join6
3 files changed, 17 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 5b389f654..a042ee016 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,9 @@ GNU coreutils NEWS -*- outline -*-
argument following the one containing the moved sub-tree.
[bug introduced in coreutils-5.1.0]
+ join --header now skips the ordering check for the first line
+ even if the other file is empty. [bug introduced in coreutils-8.5]
+
rm -f no longer fails for EINVAL or EILSEQ on file systems that
reject file names invalid for that file system.
diff --git a/src/join.c b/src/join.c
index bf7e908af..ab7625183 100644
--- a/src/join.c
+++ b/src/join.c
@@ -648,13 +648,17 @@ join (FILE *fp1, FILE *fp2)
autocount_2 = seq2.count ? seq2.lines[0]->nfields : 0;
}
- if (join_header_lines && seq1.count && seq2.count)
+ if (join_header_lines && (seq1.count || seq2.count))
{
- prjoin (seq1.lines[0], seq2.lines[0]);
+ struct line const *hline1 = seq1.count ? seq1.lines[0] : &uni_blank;
+ struct line const *hline2 = seq2.count ? seq2.lines[0] : &uni_blank;
+ prjoin (hline1, hline2);
prevline[0] = NULL;
prevline[1] = NULL;
- advance_seq (fp1, &seq1, true, 1);
- advance_seq (fp2, &seq2, true, 2);
+ if (seq1.count)
+ advance_seq (fp1, &seq1, true, 1);
+ if (seq2.count)
+ advance_seq (fp2, &seq2, true, 2);
}
while (seq1.count && seq2.count)
diff --git a/tests/misc/join b/tests/misc/join
index 3cf278b9f..5086ee75e 100755
--- a/tests/misc/join
+++ b/tests/misc/join
@@ -239,6 +239,12 @@ my @tv = (
[ "ID1 Name\n1 A\n2 B\n", "ID2 Color\n1 red\n"],
"ID1 Name Color\n1 A red\n", 0],
+# '--header' doesn't check order of a header
+# even if there is no header in the second file
+['header-6', '--header -a1',
+ [ "ID1 Name\n1 A\n", ""],
+ "ID1 Name\n1 A\n", 0],
+
);
# Convert the above old-style test vectors to the newer