+#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "byterun.h"
+static int
+xgetc(PerlIO *io)
+{
+ dTHX;
+ return PerlIO_getc(io);
+}
+
+static int
+xfread(char *buf, size_t size, size_t n, PerlIO *io)
+{
+ dTHX;
+ int i = PerlIO_read(io, buf, n * size);
+ if (i > 0)
+ i /= size;
+ return i;
+}
+
static void
freadpv(U32 len, void *data, XPV *pv)
{
+ dTHX;
New(666, pv->xpv_pv, len, char);
- fread(pv->xpv_pv, 1, len, (FILE*)data);
+ 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;
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;
+ bs.pfgetc = (int(*) (void*))xgetc;
+ bs.pfread = (int(*) (char*,size_t,size_t,void*))xfread;
+ bs.pfreadpv = freadpv;
- byterun(bs);
+ byterun(aTHXo_ bs);
if (PL_in_eval) {
OP *o;