diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 2002-12-18 02:08:12 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 2002-12-18 02:08:12 +0000 |
commit | 4a9d61009ab1e3df94ef4ecfcc453c9ce73010a4 (patch) | |
tree | 5bb486e54adfa3de89ac2448576a0f0d61f72722 /ext/PerlIO | |
parent | 87755fa7011638e8ad4f4be9619e28e676b74d12 (diff) | |
download | perl-4a9d61009ab1e3df94ef4ecfcc453c9ce73010a4.tar.gz |
windows: support for large files
note that this change will break binary compatibility with the
default 5.8.0 build options; nevertheless I think it is worth
having in 5.8.1 (people who want the compatibility can disable
the option in the makefile)
p4raw-id: //depot/perl@18327
Diffstat (limited to 'ext/PerlIO')
-rw-r--r-- | ext/PerlIO/scalar/scalar.xs | 10 | ||||
-rw-r--r-- | ext/PerlIO/via/via.xs | 7 |
2 files changed, 10 insertions, 7 deletions
diff --git a/ext/PerlIO/scalar/scalar.xs b/ext/PerlIO/scalar/scalar.xs index 7bcee5774e..d92ef83aa2 100644 --- a/ext/PerlIO/scalar/scalar.xs +++ b/ext/PerlIO/scalar/scalar.xs @@ -105,10 +105,10 @@ SSize_t PerlIOScalar_unread(pTHX_ PerlIO * f, const void *vbuf, Size_t count) { PerlIOScalar *s = PerlIOSelf(f, PerlIOScalar); - char *dst = SvGROW(s->var, s->posn + count); + char *dst = SvGROW(s->var, (STRLEN)s->posn + count); Move(vbuf, dst + s->posn, count, char); s->posn += count; - SvCUR_set(s->var, s->posn); + SvCUR_set(s->var, (STRLEN)s->posn); SvPOK_on(s->var); return count; } @@ -128,7 +128,7 @@ PerlIOScalar_write(pTHX_ PerlIO * f, const void *vbuf, Size_t count) } else { if ((s->posn + count) > SvCUR(sv)) - dst = SvGROW(sv, s->posn + count); + dst = SvGROW(sv, (STRLEN)s->posn + count); else dst = SvPV_nolen(sv); offset = s->posn; @@ -136,7 +136,7 @@ PerlIOScalar_write(pTHX_ PerlIO * f, const void *vbuf, Size_t count) } Move(vbuf, dst + offset, count, char); if ((STRLEN) s->posn > SvCUR(sv)) - SvCUR_set(sv, s->posn); + SvCUR_set(sv, (STRLEN)s->posn); SvPOK_on(s->var); return count; } @@ -182,7 +182,7 @@ PerlIOScalar_get_cnt(pTHX_ PerlIO * f) if (PerlIOBase(f)->flags & PERLIO_F_CANREAD) { PerlIOScalar *s = PerlIOSelf(f, PerlIOScalar); if (SvCUR(s->var) > (STRLEN) s->posn) - return SvCUR(s->var) - s->posn; + return SvCUR(s->var) - (STRLEN)s->posn; else return 0; } diff --git a/ext/PerlIO/via/via.xs b/ext/PerlIO/via/via.xs index d4546781e6..524d24a69c 100644 --- a/ext/PerlIO/via/via.xs +++ b/ext/PerlIO/via/via.xs @@ -350,7 +350,8 @@ IV PerlIOVia_seek(pTHX_ PerlIO * f, Off_t offset, int whence) { PerlIOVia *s = PerlIOSelf(f, PerlIOVia); - SV *offsv = sv_2mortal(newSViv(offset)); + SV *offsv = sv_2mortal(sizeof(Off_t) > sizeof(IV) + ? newSVnv((NV)offset) : newSViv((IV)offset)); SV *whsv = sv_2mortal(newSViv(whence)); SV *result = PerlIOVia_method(aTHX_ f, MYMethod(SEEK), G_SCALAR, offsv, whsv, @@ -364,7 +365,9 @@ PerlIOVia_tell(pTHX_ PerlIO * f) PerlIOVia *s = PerlIOSelf(f, PerlIOVia); SV *result = PerlIOVia_method(aTHX_ f, MYMethod(TELL), G_SCALAR, Nullsv); - return (result) ? (Off_t) SvIV(result) : (Off_t) - 1; + return (result) + ? (SvNOK(result) ? (Off_t)SvNV(result) : (Off_t)SvIV(result)) + : (Off_t) - 1; } SSize_t |