+#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;