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

From: Anoop Sharma <[email-masked]>
Date: Wed, 6 Jun 2012 09:30:11 +0530

1. The comment in code - "Don't bother testing for failure for such a
small amount. Any failure will be detected upon close." may be
re-looked too, since we are now lseeking after it.

What if we change plain fwrite to:
      if (fwrite (buffer, 1, n + 1, stdout) < (n + 1))
            error (EXIT_FAILURE, errno, _("write error"));

2. Maybe using lseek with SEEK_CUR in place of SEEK_SET would reflect
logic better.

With Thanks for quick responses,
Anoop

On Wed, Jun 6, 2012 at 2:08 AM, GNU bug Tracking System
<[email-masked]> wrote:
>
> 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
>
>
> ---------- Forwarded message ----------
> From: Jim Meyering <[email-masked]>
> To: Pádraig Brady <[email-masked]>
> Cc: [email-masked]
> Date: Tue, 05 Jun 2012 22:35:13 +0200
> Subject: Re: bug#11631: Head command does not position file pointer correctly for negative line count
> Jim Meyering wrote:
> > Thanks, and thanks for the review.  Pushed.
>
> And with this message, I've closed the issue.
>
>
>
> ---------- Forwarded message ----------
> From: Anoop Sharma <[email-masked]>
> To: [email-masked]
> Cc:
> Date: Tue, 5 Jun 2012 15:07:19 +0530
> Subject: Head command does not position file pointer correctly for negative line count
> 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);
> /*****************************************************************************************************************************/
>
>