From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/13844 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: James Larrowe Newsgroups: gmane.linux.lib.musl.general Subject: Re: fgets() doesn't call fsync() before getting input Date: Thu, 21 Feb 2019 15:16:23 -0500 Message-ID: References: <20190221152243.GF23599@brightrain.aerifal.cx> <5c1de98e-9606-81d6-0e69-8f3dbb916065@adelielinux.org> <20190221170748.GI23599@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="000000000000cfedee05826d26a8" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="58360"; mail-complaints-to="usenet@blaine.gmane.org" To: musl@lists.openwall.com Original-X-From: musl-return-13860-gllmg-musl=m.gmane.org@lists.openwall.com Thu Feb 21 21:23:35 2019 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.89) (envelope-from ) id 1gwusW-000F0c-3H for gllmg-musl@m.gmane.org; Thu, 21 Feb 2019 21:23:32 +0100 Original-Received: (qmail 1770 invoked by uid 550); 21 Feb 2019 20:16:49 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 1752 invoked from network); 21 Feb 2019 20:16:49 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=Tv8DpDXngOgtudRZxxfPYVXutCL6yu/TCj1ApZx/uyw=; b=Z7YP05hUn43kddy9Xp5TzM7a720bnB/saw9bnXOCRXPMZTlE4fuCiAALivzWhTZfWt MZmeJBn8DHbz54v2HJ6ZYfn1Yrl/UaBzZUKVz0r/Ls+G4AYhyOFz8KKMyLWCbw7Qzdpi 53ebiG4E7MdFw/vZjRYmuvyLfieZshdOLd3ratGdRNUBtWxjE/8JIqjqex93Z1aR/ajA eeOjIKbBgveYbdKx9zfkW2fwUSHms9YKOGmwvQ0mF69tKMKQIwOmB0BsVHsFlzUNfkn4 rXDtqcLfEhOm1arMBus8HcQ1Lc2t/ZxOaOgoGHgw+M+Hg9wEGsnWRZpFNiD7S19xlo2Z FP4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=Tv8DpDXngOgtudRZxxfPYVXutCL6yu/TCj1ApZx/uyw=; b=CvMQXfVmSWMQ3GlG+NZbuxfzaExcZHMF2OTGumisgdAC3UQCignVxPEE6q3Tcnmhus uUE+IuTLF5oiwzAH/M9wLe6V86T55kZy7LJl1Qh8NzwP9gxWVlXG/Nwod8lVvLeOD7YP xvxqrxSiO60vrHxrzE3a1umFUI+iR2c6vQjeUz+bW/+fF6EoxlXd15t2wylSi2SqUMWp Ec3ZrXfKBH1a3tYNkrGAK8F29fQDqrKlAS7cjjnt915Pk/oJS9Oz03Fc4ZPJ9qFM4ai4 kuSM2863K0qPTrFd4fzXTPXESUHpKKa5vjH54Km3EXUtuuetomWbJ82h6TtejGhftwDB 8z0w== X-Gm-Message-State: AHQUAuaL71ykadTZtnz5BltvehW+zIovbDtLPZ2A4K4bxll5hqLD68wJ UT6JkeE+v4wwDl3JROW3xgd8Z3fFNnpAj7d84R4tbg== X-Google-Smtp-Source: AHgI3IZSM2FjMA8aIcLthDkFB98qzHIlULpvH48IRC5PAyo1O1t2m2pLUbBDvNdIKh4Si7UFStdYBddcYp/gigk2sOc= X-Received: by 2002:a05:6402:650:: with SMTP id u16mr261475edx.148.1550780197759; Thu, 21 Feb 2019 12:16:37 -0800 (PST) In-Reply-To: <20190221170748.GI23599@brightrain.aerifal.cx> Xref: news.gmane.org gmane.linux.lib.musl.general:13844 Archived-At: --000000000000cfedee05826d26a8 Content-Type: text/plain; charset="UTF-8" Sorry, this was a typo. I meant fflush(). However, it's still not called. It's fixed in my program now, however I'm not sure what to do in this case. Do I just call ffush() on stdin, stdout, and stderr or do I send a patch to fgets()? On Thu, Feb 21, 2019 at 12:08 PM Rich Felker wrote: > On Thu, Feb 21, 2019 at 10:31:36AM -0600, A. Wilcox wrote: > > On 02/21/19 09:22, Rich Felker wrote: > > > On Thu, Feb 21, 2019 at 10:09:03AM -0500, James Larrowe wrote: > > >> I'm writing a program that prints a dialogue to the screen and then > asks > > >> for input. In musl, the dialogue does not show before fgets() is > called, > > >> however in glibc it does. That causes a blank prompt and also some > > >> confusion. Attached is a minimal example and a log. > > > > > > This difference is intentional. The specification allows but does not > > > require that attempting to read from a line-buffered input stream > > > causes all line-buffered output streams to be flushed. This behavior > > > was somewhat convenient for old-style input-prompt idioms, but it > > > doesn't scale with large numbers of files open and deadlocks with some > > > multi-threaded usage. The portable solution here for applications is > > > to fflush (not fsync) the particular stream you want flushed. > > > > > > Rich > > > > > > FWIW, the only package we've come across where this is a problem is > > mac-fdisk (which hasn't been updated since 1997 - yes, 22 years ago). > > > > We have a patch: > > > > > https://code.foxkit.us/adelie/packages/blob/master/user/mac-fdisk/flush-stdout.patch > > I think it's more of an issue for the early examples in C books and > tutorials, which invariably but inexplicably use a 1970s-era "prompt > for input" model rather than argv[] or something that would be a lot > more familiar (and amenable to testing) to modern readers. > > Rich > --000000000000cfedee05826d26a8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Sorry, this was a typo. I meant fflush(). However, it'= s still not called. It's fixed in my program now, however I'm not s= ure what to do in this case. Do I just call ffush() on stdin, stdout, and s= tderr or do I send a patch to fgets()?

=
On Thu, Feb 21, 2019 at 12:08 PM Rich= Felker <dalias@libc.org> wrot= e:
On Thu, Feb 2= 1, 2019 at 10:31:36AM -0600, A. Wilcox wrote:
> On 02/21/19 09:22, Rich Felker wrote:
> > On Thu, Feb 21, 2019 at 10:09:03AM -0500, James Larrowe wrote: > >> I'm writing a program that prints a dialogue to the scree= n and then asks
> >> for input. In musl, the dialogue does not show before fgets()= is called,
> >> however in glibc it does. That causes a blank prompt and also= some
> >> confusion. Attached is a minimal example and a log.
> >
> > This difference is intentional. The specification allows but does= not
> > require that attempting to read from a line-buffered input stream=
> > causes all line-buffered output streams to be flushed. This behav= ior
> > was somewhat convenient for old-style input-prompt idioms, but it=
> > doesn't scale with large numbers of files open and deadlocks = with some
> > multi-threaded usage. The portable solution here for applications= is
> > to fflush (not fsync) the particular stream you want flushed.
> >
> > Rich
>
>
> FWIW, the only package we've come across where this is a problem i= s
> mac-fdisk (which hasn't been updated since 1997 - yes, 22 years ag= o).
>
> We have a patch:
>
> https://cod= e.foxkit.us/adelie/packages/blob/master/user/mac-fdisk/flush-stdout.patch

I think it's more of an issue for the early examples in C books and
tutorials, which invariably but inexplicably use a 1970s-era "prompt for input" model rather than argv[] or something that would be a lot more familiar (and amenable to testing) to modern readers.

Rich
--000000000000cfedee05826d26a8--