Re: [ID 20020227.024] unexpected warning getc() on unopened filehandle STDIN
Rafael Garcia-Suarez [Tue, 5 Mar 2002 14:35:57 +0000 (15:35 +0100)]
Message-ID: <20020305143557.C695@rafael>

p4raw-id: //depot/perl@15044

pp_sys.c
t/lib/warnings/pp_sys

index e44ab1c..87231ee 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -1158,7 +1158,8 @@ PP(pp_getc)
        RETURN;
     }
     if (!gv || do_eof(gv)) { /* make sure we have fp with something */
-       if (ckWARN2(WARN_UNOPENED,WARN_CLOSED) && IoTYPE(io) != IoTYPE_WRONLY)
+       if (ckWARN2(WARN_UNOPENED,WARN_CLOSED)
+               && (!io || (!IoIFP(io) && IoTYPE(io) != IoTYPE_WRONLY)))
            report_evil_fh(gv, io, PL_op->op_type);
        RETPUSHUNDEF;
     }
index 5349f50..8dc0bf9 100644 (file)
@@ -419,9 +419,19 @@ use warnings qw(unopened closed) ;
 getc FOO;
 close STDIN;
 getc STDIN;
+# Create an empty file
+$file = 'getcwarn.tmp';
+open FH1, ">$file" or die "# $!"; close FH1;
+open FH2, $file    or die "# $!";
+getc FH2; # Should not warn at EOF
+close FH2;
+getc FH2; # Warns, now
+unlink $file;
 no warnings qw(unopened closed) ;
 getc FOO;
 getc STDIN;
+getc FH2;
 EXPECT
 getc() on unopened filehandle FOO at - line 3.
 getc() on closed filehandle STDIN at - line 5.
+getc() on closed filehandle FH2 at - line 12.