summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hansen <christian.hansen@mac.com>2012-03-26 13:47:16 +0200
committerLeon Timmermans <fawaka@gmail.com>2012-03-26 19:18:10 +0200
commit3215bcc0361b22c5ada5cfcb6bd3b56b8afc8ce1 (patch)
treeb9127f245e9d1b329fe6b671c13939bf22ac26c5
parent826b3747f7551c014141c503741687c6723cbdfc (diff)
downloadperl-3215bcc0361b22c5ada5cfcb6bd3b56b8afc8ce1.tar.gz
Set PERLIO_F_EOF flag in PerlIO::scalar
PerlIO::scalar didn't set the PERLIO_F_EOF flag, making PerlIO_eof() unreliable.
-rw-r--r--ext/PerlIO-scalar/scalar.pm2
-rw-r--r--ext/PerlIO-scalar/scalar.xs14
2 files changed, 14 insertions, 2 deletions
diff --git a/ext/PerlIO-scalar/scalar.pm b/ext/PerlIO-scalar/scalar.pm
index dac7491e0e..aadfdb663f 100644
--- a/ext/PerlIO-scalar/scalar.pm
+++ b/ext/PerlIO-scalar/scalar.pm
@@ -1,5 +1,5 @@
package PerlIO::scalar;
-our $VERSION = '0.13';
+our $VERSION = '0.14';
require XSLoader;
XSLoader::load();
1;
diff --git a/ext/PerlIO-scalar/scalar.xs b/ext/PerlIO-scalar/scalar.xs
index eac682b5c3..d324bdd15f 100644
--- a/ext/PerlIO-scalar/scalar.xs
+++ b/ext/PerlIO-scalar/scalar.xs
@@ -125,6 +125,18 @@ PerlIOScalar_tell(pTHX_ PerlIO * f)
return s->posn;
}
+IV
+PerlIOScalar_eof(pTHX_ PerlIO * f)
+{
+ if (PerlIOBase(f)->flags & PERLIO_F_CANREAD) {
+ PerlIOScalar *s = PerlIOSelf(f, PerlIOScalar);
+ char *p;
+ STRLEN len;
+ p = SvPV(s->var, len);
+ return len - (STRLEN)(s->posn) <= 0;
+ }
+ return 1;
+}
SSize_t
PerlIOScalar_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
@@ -343,7 +355,7 @@ PERLIO_FUNCS_DECL(PerlIO_scalar) = {
PerlIOScalar_close,
PerlIOScalar_flush,
PerlIOScalar_fill,
- PerlIOBase_eof,
+ PerlIOScalar_eof,
PerlIOBase_error,
PerlIOBase_clearerr,
PerlIOBase_setlinebuf,