X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FIO%2FIO.xs;h=e614cffabb146795f7881d89c6fa4c8b5cabd591;hb=c5be433b5c5658093bc9cae4434721a0b63e7a85;hp=a434d08ea3e8ad4e703ea566c06c32bd9a8914d9;hpb=cf7fe8a27ac6ee8776974a7c83e80425f2ec0ff8;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/IO/IO.xs b/ext/IO/IO.xs index a434d08..e614cff 100644 --- a/ext/IO/IO.xs +++ b/ext/IO/IO.xs @@ -4,6 +4,7 @@ * modify it under the same terms as Perl itself. */ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #define PERLIO_NOT_STDIO 1 #include "perl.h" @@ -27,87 +28,26 @@ typedef FILE * InputStream; typedef FILE * OutputStream; #endif -#include "patchlevel.h" - -#if (PATCHLEVEL < 3) || ((PATCHLEVEL == 3) && (SUBVERSION < 22)) - /* before 5.003_22 */ -# define MY_start_subparse(fmt,flags) start_subparse() -#else -# if (PATCHLEVEL == 3) && (SUBVERSION == 22) - /* 5.003_22 */ -# define MY_start_subparse(fmt,flags) start_subparse(flags) -# else - /* 5.003_23 onwards */ -# define MY_start_subparse(fmt,flags) start_subparse(fmt,flags) -# endif -#endif +#define MY_start_subparse(fmt,flags) start_subparse(fmt,flags) #ifndef gv_stashpvn #define gv_stashpvn(str,len,flags) gv_stashpv(str,flags) #endif static int -not_here(s) -char *s; +not_here(char *s) { croak("%s not implemented on this architecture", s); return -1; } -#ifndef newCONSTSUB -/* - * Define an XSUB that returns a constant scalar. The resulting structure is - * identical to that created by the parser when it parses code like : - * - * sub xyz () { 123 } - * - * This allows the constants from the XSUB to be inlined. - * - * !!! THIS SHOULD BE ADDED INTO THE CORE CODE !!!! - * - */ - -static void -newCONSTSUB(stash,name,sv) - HV *stash; - char *name; - SV *sv; -{ -#ifdef dTHR - dTHR; -#endif - U32 oldhints = hints; - HV *old_cop_stash = curcop->cop_stash; - HV *old_curstash = curstash; - line_t oldline = curcop->cop_line; - curcop->cop_line = copline; - - hints &= ~HINT_BLOCK_SCOPE; - if(stash) - curstash = curcop->cop_stash = stash; - - newSUB( - MY_start_subparse(FALSE, 0), - newSVOP(OP_CONST, 0, newSVpv(name,0)), - newSVOP(OP_CONST, 0, &sv_no), /* SvPV(&sv_no) == "" -- GMB */ - newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) - ); - - hints = oldhints; - curcop->cop_stash = old_cop_stash; - curstash = old_curstash; - curcop->cop_line = oldline; -} -#endif #ifndef PerlIO #define PerlIO_fileno(f) fileno(f) #endif static int -io_blocking(f,block) -InputStream f; -int block; +io_blocking(InputStream f, int block) { int RETVAL; if(!f) { @@ -205,7 +145,7 @@ fgetpos(handle) ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t))); } else { - ST(0) = &sv_undef; + ST(0) = &PL_sv_undef; errno = EINVAL; } @@ -214,11 +154,13 @@ fsetpos(handle, pos) InputStream handle SV * pos CODE: - if (handle) + char *p; + STRLEN len; + if (handle && (p = SvPV(pos,len)) && len == sizeof(Fpos_t)) #ifdef PerlIO - RETVAL = PerlIO_setpos(handle, (Fpos_t*)SvPVX(pos)); + RETVAL = PerlIO_setpos(handle, (Fpos_t*)p); #else - RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos)); + RETVAL = fsetpos(handle, (Fpos_t*)p); #endif else { RETVAL = -1; @@ -249,7 +191,7 @@ new_tmpfile(packname = "IO::File") SvREFCNT_dec(gv); /* undo increment in newRV() */ } else { - ST(0) = &sv_undef; + ST(0) = &PL_sv_undef; SvREFCNT_dec(gv); }