GNU logs - #61300, boring messages


Message sent to bug-coreutils@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#61300: wc -c doesn't advance stdin position when it's a regular file
Resent-From: Stephane Chazelas <stephane@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-coreutils@HIDDEN
Resent-Date: Sun, 05 Feb 2023 18:28:02 +0000
Resent-Message-ID: <handler.61300.B.167562165730635 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 61300
X-GNU-PR-Package: coreutils
X-GNU-PR-Keywords: 
To: 61300 <at> debbugs.gnu.org
X-Debbugs-Original-To: bug-coreutils@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.167562165730635
          (code B ref -1); Sun, 05 Feb 2023 18:28:02 +0000
Received: (at submit) by debbugs.gnu.org; 5 Feb 2023 18:27:37 +0000
Received: from localhost ([127.0.0.1]:46409 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1pOjjk-0007y0-VK
	for submit <at> debbugs.gnu.org; Sun, 05 Feb 2023 13:27:37 -0500
Received: from lists.gnu.org ([209.51.188.17]:48658)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <stephane@HIDDEN>) id 1pOjjj-0007xt-LE
 for submit <at> debbugs.gnu.org; Sun, 05 Feb 2023 13:27:36 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <stephane@HIDDEN>)
 id 1pOjjj-0007Tz-Bx
 for bug-coreutils@HIDDEN; Sun, 05 Feb 2023 13:27:35 -0500
Received: from relay3-d.mail.gandi.net ([2001:4b98:dc4:8::223])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <stephane@HIDDEN>)
 id 1pOjjh-0006wH-Hv
 for bug-coreutils@HIDDEN; Sun, 05 Feb 2023 13:27:35 -0500
Received: (Authenticated sender: stephane@HIDDEN)
 by mail.gandi.net (Postfix) with ESMTPSA id 30EF660002
 for <bug-coreutils@HIDDEN>; Sun,  5 Feb 2023 18:27:28 +0000 (UTC)
Date: Sun, 5 Feb 2023 18:27:28 +0000
From: Stephane Chazelas <stephane@HIDDEN>
Message-ID: <20230205182728.5i2oi23purlzp6jj@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Received-SPF: pass client-ip=2001:4b98:dc4:8::223;
 envelope-from=stephane@HIDDEN; helo=relay3-d.mail.gandi.net
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.6 (-)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.6 (--)

"wc -c" without filename arguments is meant to read stdin til
EOF and report the number of bytes it has read.

When stdin is on a regular file, GNU wc has that optimisation
whereby it skips the reading, does a pos = lseek(0,0,SEEK_CUR)
to find out its current position within the file, fstat(0) and
reports st_size - pos (assuming st_size > pos).

However, it does not move the position to the end of the file.
That means for instance that:

$ echo test > file
$ { wc -c; wc -c; } < file
5
5

Instead of 5, then 0:

$ { wc -c; cat; } < file
5
test

So the optimisation is incomplete.

It also reports the size of the file even if it could not possibly read it
because it's not open in read mode:

{ wc -c; } 0>> file
5

IMO, it should only do the optimisation if
- fcntl(F_GETFL) to check that the file is opened in O_RDONLY or O_RDWR
- current checks for /proc /sys-like filesystems
- pos > st_size
- lseek(0,st_size,SEEK_POS) is successful.

(that leaves a race window above where it could move the cursor
backward, but I would think that can be ignored as if something
else reads at the same time, there's not much we can expect
anyway).

-- 
Stephane




Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: Stephane Chazelas <stephane@HIDDEN>
Subject: bug#61300: Acknowledgement (wc -c doesn't advance stdin position
 when it's a regular file)
Message-ID: <handler.61300.B.167562165730635.ack <at> debbugs.gnu.org>
References: <20230205182728.5i2oi23purlzp6jj@HIDDEN>
X-Gnu-PR-Message: ack 61300
X-Gnu-PR-Package: coreutils
Reply-To: 61300 <at> debbugs.gnu.org
Date: Sun, 05 Feb 2023 18:28:02 +0000

Thank you for filing a new bug report with debbugs.gnu.org.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-coreutils@HIDDEN

If you wish to submit further information on this problem, please
send it to 61300 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
61300: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D61300
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems



Last modified: Sun, 5 Feb 2023 18:30:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.