X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FByteLoader%2FByteLoader.xs;h=c9d7d16d06020b3002b4c70567a5e9f0eedd412f;hb=36d52296c16de220053927a47cf296e148a3a79d;hp=98053c7918e7562d7aaf514d4e001e2f5b506612;hpb=b295d1132eed0f33e5e8fda2cd65ee1297fdabdb;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/ByteLoader/ByteLoader.xs b/ext/ByteLoader/ByteLoader.xs index 98053c7..c9d7d16 100644 --- a/ext/ByteLoader/ByteLoader.xs +++ b/ext/ByteLoader/ByteLoader.xs @@ -1,35 +1,40 @@ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" +#include "byterun.h" -#include "byterun.c" - -/* defgv must be accessed differently under threaded perl */ -/* DEFSV et al are in 5.004_56 */ -#ifndef DEFSV -#define DEFSV GvSV(defgv) +#ifdef NEED_FGETC_PROTOTYPE +extern int fgetc(); +#endif +#ifdef NEED_FREAD_PROTOTYPE +extern int fread(); #endif +static void +freadpv(U32 len, void *data, XPV *pv) +{ + dTHX; + New(666, pv->xpv_pv, len, char); + PerlIO_read((PerlIO*)data, (void*)pv->xpv_pv, len); + pv->xpv_len = len; + pv->xpv_cur = len - 1; +} + static I32 -#ifdef PERL_OBJECT -byteloader_filter(CPerlObj *pPerl, int idx, SV *buf_sv, int maxlen) -#else -byteloader_filter(int idx, SV *buf_sv, int maxlen) -#endif +byteloader_filter(pTHXo_ int idx, SV *buf_sv, int maxlen) { + dTHR; OP *saveroot = PL_main_root; OP *savestart = PL_main_start; - -#ifdef INDIRECT_BGET_MACROS - struct bytesream bs; + struct bytestream bs; bs.data = PL_rsfp; - bs.fgetc = (int(*) _((void*)))fgetc; - bs.fread = (int(*) _((char*,size_t,size_t,void*)))fread; - bs.freadpv = freadpv; -#else - byterun(PL_rsfp); -#endif + bs.pfgetc = (int(*) (void*))fgetc; + bs.pfread = (int(*) (char*,size_t,size_t,void*))fread; + bs.pfreadpv = freadpv; + + byterun(aTHXo_ bs); if (PL_in_eval) { OP *o;