From: Roderick Schertler Date: Fri, 19 Dec 1997 12:52:36 +0000 (-0500) Subject: [win32] another 'old' patch X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3500f6799fed8479a1efcf408255735921bd3f48;p=p5sagit%2Fp5-mst-13.2.git [win32] another 'old' patch Message-Id: Subject: [PERL] [PATCH] Re: Problem with open >&= p4raw-id: //depot/win32/perl@610 --- diff --git a/doio.c b/doio.c index de0cdee..cc038e2 100644 --- a/doio.c +++ b/doio.c @@ -92,6 +92,7 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe PerlIO *fp; int fd; int result; + bool was_fdopen = FALSE; forkprocess = 1; /* assume true if no fork */ @@ -221,6 +222,8 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe } if (dodup) fd = PerlLIO_dup(fd); + else + was_fdopen = TRUE; if (!(fp = PerlIO_fdopen(fd,mode))) { if (dodup) PerlLIO_close(fd); @@ -330,7 +333,8 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe sv = *av_fetch(fdpid,fd,TRUE); (void)SvUPGRADE(sv, SVt_IV); SvIVX(sv) = pid; - PerlIO_close(fp); + if (!was_fdopen) + PerlIO_close(fp); } fp = saveifp; diff --git a/t/op/misc.t b/t/op/misc.t index 1ca45db..40c9c38 100755 --- a/t/op/misc.t +++ b/t/op/misc.t @@ -358,3 +358,13 @@ init end argv <> ######## +-l +# fdopen from a system descriptor to a system descriptor used to close +# the former. +open STDERR, '>&=STDOUT' or die $!; +select STDOUT; $| = 1; print fileno STDOUT; +select STDERR; $| = 1; print fileno STDERR; +EXPECT +1 +2 +########