Subject: bug#11631: closed (Re: bug#11631: Head command does not position file pointer correctly for negative line count)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 05 Jun 2012 20:38:02 +0000

Your bug report

#11631: Head command does not position file pointer correctly for negative line count

which was filed against the coreutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
11631: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11631
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#11631: Head command does not position file pointer correctly for negative line count
From: Jim Meyering <[email-masked]>
To: Pádraig Brady <[email-masked]>
Cc: [email-masked]
Date: Tue, 05 Jun 2012 22:35:13 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Jim Meyering wrote:
> Thanks, and thanks for the review.  Pushed.

And with this message, I've closed the issue.

Subject: Head command does not position file pointer correctly for negative line count
From: Anoop Sharma <[email-masked]>
To: [email-masked]
Date: Tue, 5 Jun 2012 15:07:19 +0530
List-Id: <debbugs-submit.debbugs.gnu.org>

Head command does not position file pointer correctly for negative line
count. Here is a demonstration of the problem.

Step 1 - Create a file with 10 lines in it.
$ yes "ABC" | head -c 40 >ip.txt
$

Step 2 - If head behaves correctly, then 2 lines should get printed after
"------------" but nothing gets printed!
$ (head -n -2; echo "------------------------"; cat) <ip.txt
ABC
ABC
ABC
ABC
ABC
ABC
ABC
ABC
------------------------
$

Step 3 - Another try fails. If head behaves correctly, then 8 lines should
get printed after "------------" but nothing gets printed!
$ (head -n -8; echo "------------------------"; cat) <ip.txt
ABC
ABC
------------------------
$

/*****************************************************************************************************************************/
Possible cause of the defect -> Following snippet is copied from head.c
(Function - elide_tail_lines_seekable ). Perhaps, there should be a lseek
after fwrite there...:

              /* Output the initial portion of the buffer
                 in which we found the desired newline byte.
                 Don't bother testing for failure for such a small amount.
                 Any failure will be detected upon close.  */
              fwrite (buffer, 1, n + 1, stdout);
/*****************************************************************************************************************************/