On Thu, Apr 17, 2025 at 11:15 PM Grisha Levit <grishale...@gmail.com> wrote:
>
> On Fri, Apr 18, 2025 at 1:51 AM Jim Meyering <j...@meyering.net> wrote:
> >
> > Surprised to find that coreutils-9.5 (fedora 41 stock) works fine:
> >
> >   $ { /bin/printf %4095s; /bin/printf %4096s; } > /dev/full
> >   /bin/printf: write error: No space left on device
> >   /bin/printf: write error: No space left on device
>
> Though OTOH (not sure why):
>
>     $ { /bin/printf %4096s; /bin/printf %4097s; } > /dev/full
>     /bin/printf: write error: No space left on device
>     /bin/printf: write error
>
> ----
>
> But I'm concerned that with this change because programs where:
>
>     1. errno is set by a failed (unchecked) write
>     2. errno is then set by some unrelated function
>     3. close_stdout() is arranged to run atexit
>     4. when close_stream() calls fclose() it does not fail
>
> will now erroneously report the error from the unrelated function
> when running close_stdout.
>
> Previously:
>
>     $ stdbuf -oL realpath -e . xxx >/dev/full
>     realpath: xxx: No such file or directory
>     realpath: write error
>
> After the patch:
>
>     $ stdbuf -oL src/realpath -e . xxx >/dev/full
>     realpath: xxx: No such file or directory
>     realpath: write error: No such file or directory

I think I've finally paged back in all of that from 20 years ago.
And I agree: there is no need for my most recent proposed change.
When fclose succeeds, yet there was a "prev_failure" but no fclose
failure, we cannot guarantee errno is relevant, so clearing it **is**
appropriate.
Now, as for what changed in F42 to make us go from printing the ENOSPC
expansion to not printing it, so far I haven't reproduced the failure.
Just built there and this works just as it does on F41:

$ src/grep --help > /dev/full

                                      :
src/grep: write error: No space left on device

Reply via email to