Re: bug? no warning from getc BOLLOCKS
Rafael Garcia-Suarez [Thu, 14 Feb 2002 23:58:00 +0000 (00:58 +0100)]
Message-ID: <20020214235800.A12901@rafael>

p4raw-id: //depot/perl@14695

pp_sys.c
t/lib/warnings/pp_sys

index e7e4121..7ce9dae 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -1134,7 +1134,7 @@ PP(pp_getc)
 {
     dSP; dTARGET;
     GV *gv;
-    IO *io;
+    IO *io = NULL;
     MAGIC *mg;
 
     if (MAXARG == 0)
@@ -1157,8 +1157,11 @@ PP(pp_getc)
            SvSetMagicSV_nosteal(TARG, TOPs);
        RETURN;
     }
-    if (!gv || do_eof(gv)) /* make sure we have fp with something */
+    if (!gv || do_eof(gv)) { /* make sure we have fp with something */
+       if (ckWARN2(WARN_UNOPENED,WARN_CLOSED) && IoTYPE(io) != IoTYPE_WRONLY)
+           report_evil_fh(gv, io, PL_op->op_type);
        RETPUSHUNDEF;
+    }
     TAINT;
     sv_setpv(TARG, " ");
     *SvPVX(TARG) = PerlIO_getc(IoIFP(GvIOp(gv))); /* should never be EOF */
index 57abd69..5349f50 100644 (file)
        open(F, ">$file") ; 
        my $a = sysread(F, $a,10) ;
 
-   lstat on filehandle %s                      [pp_lstat]
+  lstat on filehandle %s                       [pp_lstat]
+
+  getc() on unopened filehandle                        [pp_getc]
+
+  getc() on closed filehandle                  [pp_getc]
 
 __END__
 # pp_sys.c [pp_untie]
@@ -409,3 +413,15 @@ close $fh;
 EXPECT
 lstat() on filehandle STDIN at - line 3.
 lstat() on filehandle $fh at - line 5.
+########
+# pp_sys.c [pp_getc]
+use warnings qw(unopened closed) ;
+getc FOO;
+close STDIN;
+getc STDIN;
+no warnings qw(unopened closed) ;
+getc FOO;
+getc STDIN;
+EXPECT
+getc() on unopened filehandle FOO at - line 3.
+getc() on closed filehandle STDIN at - line 5.