This is a live mirror of the Perl 5 development currently hosted at
More specific comment based on findings in RT#7586
authorH.Merijn Brand - Tux <>
Mon, 16 Sep 2013 12:37:55 +0000 (14:37 +0200)
committerH.Merijn Brand - Tux <>
Mon, 16 Sep 2013 12:37:55 +0000 (14:37 +0200)
Suggested by Nicholas Clark, somewhat tidied to Glossary standards

[perl #7586] STDOUT is not flushed before exec().

Nicholas comment in the original fix:

It turns out* that $Config{fflushNULL} on HP-UX is *STILL* undef, because
fflush(NULL) wrongly closes STDIN if STDIN is a pipe (which is what the
Configure test probes for).

I wonder if HP are even aware that their platform is still not quite 100%
C89 conformant? Of if they'll fix it in time for the 25th anniversary of
the first ANSI C standard?

(Also, given that that this bug had been present on Solaris, and on early
FreeBSDs, I wonder if it's a bug in common code they inherit from, or just
convergent mistake making)

Nicholas Clark

* At least on the system Merijn provides for us.


index 783a7f7..1a8e777 100644 (file)
        d_sysconf i_unistd d_stdio_stream_array stdio_stream_array i_stdlib
 ?MAKE: -pick add $@ %<
-?S:    This symbol, if defined, tells that fflush(NULL) does flush
-?S:    all pending stdio output.
+?S:    This symbol, if defined, tells that fflush(NULL) correctly
+?S:    flushes all pending stdio output without side effects. In
+?S:    particular, on some platforms calling fflush(NULL) *still*
+?S:    corrupts STDIN if it is a pipe.
 ?S:    This symbol, if defined, tells that to flush
 ?S:    even be probed for and will be left undefined.
-?C:    This symbol, if defined, tells that fflush(NULL) does flush
-?C:    all pending stdio output.
+?C:    This symbol, if defined, tells that fflush(NULL) correctly
+?C:    flushes all pending stdio output without side effects. In
+?C:    particular, on some platforms calling fflush(NULL) *still*
+?C:    corrupts STDIN if it is a pipe.
 ?C:    This symbol, if defined, tells that to flush