mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-20 18:56:39 +02:00
head: fix bug with head -c-N when stdin is not at start
* src/head.c (elide_tail_bytes_file): Fix typo in lseek invocation. * tests/misc/head-c.sh: Add test for this bug. * NEWS: Document this.
This commit is contained in:
4
NEWS
4
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]
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user