summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--src/head.c2
-rwxr-xr-xtests/misc/head-c.sh8
3 files changed, 13 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 582f06082..4402a023c 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,10 @@ GNU coreutils NEWS -*- outline -*-
date could crash or go into an infinite loop when parsing a malformed TZ="".
[bug introduced with the --date='TZ="" ..' parsing feature in coreutils-5.3.0]
+ head --bytes=-N - no longer fails with a bogus diagnostic when stdin's
+ seek pointer is not at the beginning.
+ [bug introduced with the --bytes=-N feature in coreutils-5.0.1]
+
head --lines=-0, when the input does not contain a trailing '\n',
now copies all input to stdout. Previously nothing was output in this case.
[bug introduced with the --lines=-N feature in coreutils-5.0.1]
diff --git a/src/head.c b/src/head.c
index b833af675..e27ce4618 100644
--- a/src/head.c
+++ b/src/head.c
@@ -443,7 +443,7 @@ elide_tail_bytes_file (const char *filename, int fd, uintmax_t n_elide)
/* Seek back to 'current' position, then copy the required
number of bytes from fd. */
- if (lseek (fd, 0, current_pos) == -1)
+ if (lseek (fd, current_pos, SEEK_SET) < 0)
{
error (0, errno, _("%s: cannot lseek back to original position"),
quote (filename));
diff --git a/tests/misc/head-c.sh b/tests/misc/head-c.sh
index 00d5f6018..d6433d0dd 100755
--- a/tests/misc/head-c.sh
+++ b/tests/misc/head-c.sh
@@ -29,6 +29,14 @@ case "$(cat out)" in
*) fail=1 ;;
esac
+# Test for a bug in coreutils 5.0.1 through 8.22.
+printf 'abc\ndef\n' > in1 || framework_failure_
+(dd bs=1 skip=1 count=0 status=none && head -c-4) < in1 > out1 || fail=1
+case "$(cat out1)" in
+ bc) ;;
+ *) fail=1 ;;
+esac
+
# Only allocate memory as needed.
# Coreutils <= 8.21 would allocate memory up front
# based on the value passed to -c