develooper Front page | perl.perl5.porters | Postings from January 2011

[perl #82802] [PATCH] fileno should return undef when PerlIO returns -1

Thread Next
From:
Leon Timmermans
Date:
January 26, 2011 01:02
Subject:
[perl #82802] [PATCH] fileno should return undef when PerlIO returns -1
Message ID:
rt-3.6.HEAD-16298-1295987583-511.82802-75-0@perl.org
# New Ticket Created by  Leon Timmermans 
# Please include the string:  [perl #82802]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=82802 >


fileno is documented to return undef on error. It currently does so if
the file isn't opened, but when the fileno method of PerlIO returns -1
it returns that value verbatim, instead of turning it into an undef.
This patch fixes that. It breaks some assumptions of Scalar::Util's
openhandle, a patch to its author will be sent at the same time.
---
 pp_sys.c      |    7 ++++++-
 t/io/perlio.t |    2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/pp_sys.c b/pp_sys.c
index 73a5c8a..0205390 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -697,6 +697,7 @@ PP(pp_fileno)
     IO *io;
     PerlIO *fp;
     const MAGIC *mg;
+    IV ret;
 
     if (MAXARG < 1)
 	RETPUSHUNDEF;
@@ -718,7 +719,11 @@ PP(pp_fileno)
 	RETPUSHUNDEF;
     }
 
-    PUSHi(PerlIO_fileno(fp));
+    ret = PerlIO_fileno(fp);
+    if (ret >= 0)
+	PUSHi(ret);
+    else
+	PUSHs(&PL_sv_undef);
     RETURN;
 }
 
diff --git a/t/io/perlio.t b/t/io/perlio.t
index 8b1cff3..28924ed 100644
--- a/t/io/perlio.t
+++ b/t/io/perlio.t
@@ -139,7 +139,7 @@ SKIP: {
     }
     my $var;
     ok( open(my $x,"+<",\$var), 'magic in-memory file via 3 arg open with \\$var');
-    ok( defined fileno($x),     '       fileno' );
+    ok( !defined fileno($x),    '       fileno' );
 
     select $x;
     ok( (print "ok\n"),         '       print' );
-- 
1.7.1



Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About