Make a read from a write-only fh to set errno
Jarkko Hietaniemi [Sat, 5 Jul 2003 18:40:51 +0000 (18:40 +0000)]
(found by Gisle)

p4raw-id: //depot/perl@20019

perlio.c

index 78b2d18..b0649df 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -2033,8 +2033,11 @@ PerlIOBase_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
 {
     STDCHAR *buf = (STDCHAR *) vbuf;
     if (f) {
-       if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD))
+        if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD)) {
+           PerlIOBase(f)->flags |= PERLIO_F_ERROR;
+           SETERRNO(EBADF, SS_IVCHAN);
            return 0;
+       }
        while (count > 0) {
            SSize_t avail = PerlIO_get_cnt(f);
            SSize_t take = 0;