X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl.h;h=02a55f2a60d69ffbb1bdb12e059ac2d9a1a68ed4;hb=69969c6f8dad38fedd2ed2c653a7948030e5ecf8;hp=cf12d63149b636a7eac395ef1ccbfb99538010f9;hpb=a5f75d667838e8e7bb037880391f5c44476d33b4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perl.h b/perl.h index cf12d63..02a55f2 100644 --- a/perl.h +++ b/perl.h @@ -10,6 +10,41 @@ #define H_PERL 1 #define OVERLOAD +#ifdef PERL_FOR_X2P +/* + * This file is being used for x2p stuff. + * Above symbol is defined via -D in 'x2p/Makefile.SH' + * Decouple x2p stuff from some of perls more extreme eccentricities. + */ +#undef MULTIPLICITY +#undef EMBED +#undef USE_STDIO +#define USE_STDIO +#endif /* PERL_FOR_X2P */ + +/* + * STMT_START { statements; } STMT_END; + * can be used as a single statement, as in + * if (x) STMT_START { ... } STMT_END; else ... + * + * Trying to select a version that gives no warnings... + */ +#if !(defined(STMT_START) && defined(STMT_END)) +# if defined(__GNUC__) && !defined(__STRICT_ANSI__) +# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ +# define STMT_END ) +# else + /* Now which other defined()s do we need here ??? */ +# if (VOIDFLAGS) && (defined(sun) || defined(__sun__)) +# define STMT_START if (1) +# define STMT_END else (void)0 +# else +# define STMT_START do +# define STMT_END while (0) +# endif +# endif +#endif + #include "embed.h" #define VOIDUSED 1 @@ -56,34 +91,89 @@ #define TAINT_PROPER(s) if (tainting) taint_proper(no_security, s) #define TAINT_ENV() if (tainting) taint_env() -#ifdef USE_BSDPGRP -# ifdef HAS_GETPGRP -# define BSD_GETPGRP(pid) getpgrp((pid)) -# endif -# ifdef HAS_SETPGRP -# define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp)) -# endif +/* XXX All process group stuff is handled in pp_sys.c. Should these + defines move there? If so, I could simplify this a lot. --AD 9/96. +*/ +/* Process group stuff changed from traditional BSD to POSIX. + perlfunc.pod documents the traditional BSD-style syntax, so we'll + try to preserve that, if possible. +*/ +#ifdef HAS_SETPGID +# define BSD_SETPGRP(pid, pgrp) setpgid((pid), (pgrp)) #else -# ifdef HAS_GETPGRP2 -# define BSD_GETPGRP(pid) getpgrp2((pid)) -# ifndef HAS_GETPGRP -# define HAS_GETPGRP -# endif -# endif -# ifdef HAS_SETPGRP2 -# define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp)) -# ifndef HAS_SETPGRP -# define HAS_SETPGRP -# endif +# if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP) +# define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp)) +# else +# ifdef HAS_SETPGRP2 /* DG/UX */ +# define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp)) +# endif +# endif +#endif +#if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP) +# define HAS_SETPGRP /* Well, effectively it does . . . */ +#endif + +/* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes + our life easier :-) so we'll try it. +*/ +#ifdef HAS_GETPGID +# define BSD_GETPGRP(pid) getpgid((pid)) +#else +# if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP) +# define BSD_GETPGRP(pid) getpgrp((pid)) +# else +# ifdef HAS_GETPGRP2 /* DG/UX */ +# define BSD_GETPGRP(pid) getpgrp2((pid)) +# endif +# endif +#endif +#if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP) +# define HAS_GETPGRP /* Well, effectively it does . . . */ +#endif + +/* These are not exact synonyms, since setpgrp() and getpgrp() may + have different behaviors, but perl.h used to define USE_BSDPGRP + (prior to 5.003_05) so some extension might depend on it. +*/ +#if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP) +# ifndef USE_BSDPGRP +# define USE_BSDPGRP +# endif +#endif + +#ifndef _TYPES_ /* If types.h defines this it's easy. */ +# ifndef major /* Does everyone's types.h define this? */ +# include # endif #endif -#include +#ifdef __cplusplus +# ifndef I_STDARG +# define I_STDARG 1 +# endif +#endif + +#ifdef I_STDARG +# include +#else +# ifdef I_VARARGS +# include +# endif +#endif + +#include "perlio.h" + #ifdef USE_NEXT_CTYPE + +#if NX_CURRENT_COMPILER_RELEASE >= 400 +#include +#else /* NX_CURRENT_COMPILER_RELEASE < 400 */ #include -#else +#endif /* NX_CURRENT_COMPILER_RELEASE >= 400 */ + +#else /* !USE_NEXT_CTYPE */ #include -#endif +#endif /* USE_NEXT_CTYPE */ #ifdef I_LOCALE #include @@ -114,13 +204,15 @@ */ #ifdef MYMALLOC # ifdef HIDEMYMALLOC -# define malloc Mymalloc -# define realloc Myremalloc -# define free Myfree +# define malloc Perl_malloc +# define realloc Perl_realloc +# define free Perl_free +# define calloc Perl_calloc # endif # define safemalloc malloc # define saferealloc realloc # define safefree free +# define safecalloc calloc #endif #define MEM_SIZE Size_t @@ -189,13 +281,6 @@ # endif #endif /* HAS_MEMCMP */ -/* XXX we prefer bcmp slightly for comparisons that don't care about ordering */ -#ifndef HAS_BCMP -# ifndef bcmp -# define bcmp(s1,s2,l) memcmp(s1,s2,l) -# endif -#endif /* HAS_BCMP */ - #if !defined(HAS_MEMMOVE) && !defined(memmove) # if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY) # define memmove(d,s,l) bcopy(s,d,l) @@ -208,12 +293,6 @@ # endif #endif -#ifndef _TYPES_ /* If types.h defines this it's easy. */ -# ifndef major /* Does everyone's types.h define this? */ -# include -# endif -#endif - #ifdef I_NETINET_IN # include #endif @@ -283,7 +362,7 @@ #else # define FIXSTATUS(sts) (U_L(sts)) # define SHIFTSTATUS(sts) (sts) -# define SETERRNO(errcode,vmserrcode) {set_errno(errcode); set_vaxc_errno(vmserrcode);} +# define SETERRNO(errcode,vmserrcode) STMT_START {set_errno(errcode); set_vaxc_errno(vmserrcode);} STMT_END #endif #ifndef MSDOS @@ -470,7 +549,7 @@ # define SLOPPYDIVIDE #endif -#if defined(cray) || defined(convex) || defined (uts) || BYTEORDER > 0xffff +#if defined(cray) || defined(convex) || BYTEORDER > 0xffff # define HAS_QUAD #endif @@ -478,11 +557,24 @@ #undef UV #endif +/* XXX QUAD stuff is not currently supported on most systems. + Specifically, perl internals don't support long long. Among + the many problems is that some compilers support long long, + but the underlying library functions (such as sprintf) don't. + Some things do work (such as quad pack/unpack on convex); + also some systems use long long for the fpos_t typedef. That + seems to work too. + + The IV type is supposed to be long enough to hold any integral + value or a pointer. + --Andy Dougherty August 1996 +*/ + #ifdef HAS_QUAD # ifdef cray # define Quad_t int # else -# if defined(convex) || defined (uts) +# if defined(convex) # define Quad_t long long # else # define Quad_t long @@ -490,9 +582,186 @@ # endif typedef Quad_t IV; typedef unsigned Quad_t UV; +# define IV_MAX PERL_QUAD_MAX +# define IV_MIN PERL_QUAD_MIN +# define UV_MAX PERL_UQUAD_MAX +# define UV_MIN PERL_UQUAD_MIN #else typedef long IV; typedef unsigned long UV; +# define IV_MAX PERL_LONG_MAX +# define IV_MIN PERL_LONG_MIN +# define UV_MAX PERL_ULONG_MAX +# define UV_MIN PERL_ULONG_MIN +#endif + +/* Previously these definitions used hardcoded figures. + * It is hoped these formula are more portable, although + * no data one way or another is presently known to me. + * The "PERL_" names are used because these calculated constants + * do not meet the ANSI requirements for LONG_MAX, etc., which + * need to be constants acceptable to #if - kja + * define PERL_LONG_MAX 2147483647L + * define PERL_LONG_MIN (-LONG_MAX - 1) + * define PERL ULONG_MAX 4294967295L + */ + +#ifdef I_LIMITS /* Needed for cast_xxx() functions below. */ +# include +#else +#ifdef I_VALUES +# include +#endif +#endif + +#ifdef CHAR_MAX +# define PERL_CHAR_MAX CHAR_MAX +#else +# ifdef MAXCHAR /* Often used in */ +# define PERL_CHAR_MAX MAXCHAR +# else +# define PERL_CHAR_MAX ((char) ((~(unsigned char)0) >> 1)) +# endif +#endif + +#ifdef CHAR_MIN +# define PERL_CHAR_MIN CHAR_MIN +#else +# ifdef MINCHAR +# define PERL_CHAR_MIN MINCHAR +# else +# define PERL_CHAR_MIN (-PERL_CHAR_MAX - ((3 & -1) == 3)) +# endif +#endif + +#ifdef UCHAR_MAX +# define PERL_UCHAR_MAX UCHAR_MAX +#else +# ifdef MAXUCHAR +# define PERL_UCHAR_MAX MAXUCHAR +# else +# define PERL_UCHAR_MAX (~(unsigned char)0) +# endif +#endif + +#define PERL_UCHAR_MIN 0 + +#ifdef SHORT_MAX +# define PERL_SHORT_MAX SHORT_MAX +#else +# ifdef MAXSHORT /* Often used in */ +# define PERL_SHORT_MAX MAXSHORT +# else +# define PERL_SHORT_MAX ((short) ((~(unsigned short)0) >> 1)) +# endif +#endif + +#ifdef SHORT_MIN +# define PERL_SHORT_MIN SHORT_MIN +#else +# ifdef MINSHORT +# define PERL_SHORT_MIN MINSHORT +# else +# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) +# endif +#endif + +#ifdef USHORT_MAX +# define PERL_USHORT_MAX USHORT_MAX +#else +# ifdef MAXUSHORT +# define PERL_USHORT_MAX MAXUSHORT +# else +# define PERL_USHORT_MAX (~(unsigned short)0) +# endif +#endif + +#define PERL_USHORT_MIN 0 + +#ifdef INT_MAX +# define PERL_INT_MAX INT_MAX +#else +# ifdef MAXINT /* Often used in */ +# define PERL_INT_MAX MAXINT +# else +# define PERL_INT_MAX ((int) ((~(unsigned int)0) >> 1)) +# endif +#endif + +#ifdef INT_MIN +# define PERL_INT_MIN INT_MIN +#else +# ifdef MININT +# define PERL_INT_MIN MININT +# else +# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) +# endif +#endif + +#ifdef UINT_MAX +# define PERL_UINT_MAX UINT_MAX +#else +# ifdef MAXUINT +# define PERL_UINT_MAX MAXUINT +# else +# define PERL_UINT_MAX (~(unsigned int)0) +# endif +#endif + +#define PERL_UINT_MIN 0 + +#ifdef LONG_MAX +# define PERL_LONG_MAX LONG_MAX +#else +# ifdef MAXLONG /* Often used in */ +# define PERL_LONG_MAX MAXLONG +# else +# define PERL_LONG_MAX ((long) ((~(unsigned long)0) >> 1)) +# endif +#endif + +#ifdef LONG_MIN +# define PERL_LONG_MIN LONG_MIN +#else +# ifdef MINLONG +# define PERL_LONG_MIN MINLONG +# else +# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) +# endif +#endif + +#ifdef ULONG_MAX +# define PERL_ULONG_MAX ULONG_MAX +#else +# ifdef MAXULONG +# define PERL_ULONG_MAX MAXULONG +# else +# define PERL_ULONG_MAX (~(unsigned long)0) +# endif +#endif + +#define PERL_ULONG_MIN 0L + +#ifdef HAS_QUAD +# ifdef QUAD_MAX +# define PERL_QUAD_MAX QUAD_MAX +# else +# define PERL_QUAD_MAX ((IV) ((~(UV)0) >> 1)) +# endif + +# ifdef QUAD_MIN +# define PERL_QUAD_MIN QUAD_MIN +# else +# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) +# endif + +# ifdef UQUAD_MAX +# define PERL_UQUAD_MAX UQUAD_MAX +# else +# define PERL_UQUAD_MAX (~(UV)0) +# endif + +# define PERL_UQUAD_MIN 0 #endif typedef MEM_SIZE STRLEN; @@ -519,7 +788,7 @@ typedef struct hv HV; typedef struct cv CV; typedef struct regexp REGEXP; typedef struct gp GP; -typedef struct sv GV; +typedef struct gv GV; typedef struct io IO; typedef struct context CONTEXT; typedef struct block BLOCK; @@ -558,12 +827,22 @@ typedef I32 (*filter_t) _((int, SV *, int)); # if defined(VMS) # include "vmsish.h" # else -# include "unixish.h" +# if defined(PLAN9) +# include "./plan9/plan9ish.h" +# else +# include "unixish.h" +# endif # endif #endif - -#ifndef HAS_PAUSE -#define pause() sleep((32767<<16)+32767) + +/* Some unistd.h's give a prototype for pause() even though + HAS_PAUSE ends up undefined. This causes the #define + below to be rejected by the compmiler. Sigh. +*/ +#ifdef HAS_PAUSE +#define Pause pause +#else +#define Pause() sleep((32767<<16)+32767) #endif #ifndef IOCPARM_LEN @@ -666,7 +945,13 @@ EXT char Error[1]; #define U_I(what) ((unsigned int)(what)) #define U_L(what) ((U32)(what)) #else +# ifdef __cplusplus + extern "C" { +# endif U32 cast_ulong _((double)); +# ifdef __cplusplus + } +# endif #define U_S(what) ((U16)cast_ulong((double)(what))) #define U_I(what) ((unsigned int)cast_ulong((double)(what))) #define U_L(what) (cast_ulong((double)(what))) @@ -677,11 +962,17 @@ U32 cast_ulong _((double)); #define I_V(what) ((IV)(what)) #define U_V(what) ((UV)(what)) #else +# ifdef __cplusplus + extern "C" { +# endif I32 cast_i32 _((double)); -#define I_32(what) (cast_i32((double)(what))) IV cast_iv _((double)); -#define I_V(what) (cast_iv((double)(what))) UV cast_uv _((double)); +# ifdef __cplusplus + } +# endif +#define I_32(what) (cast_i32((double)(what))) +#define I_V(what) (cast_iv((double)(what))) #define U_V(what) (cast_uv((double)(what))) #endif @@ -707,6 +998,9 @@ Gid_t getegid _((void)); #endif #ifdef DEBUGGING +#ifndef Perl_debug_log +#define Perl_debug_log PerlIO_stderr() +#endif #define YYDEBUG 1 #define DEB(a) a #define DEBUG(a) if (debug) a @@ -717,7 +1011,7 @@ Gid_t getegid _((void)); #define DEBUG_o(a) if (debug & 16) a #define DEBUG_c(a) if (debug & 32) a #define DEBUG_P(a) if (debug & 64) a -#define DEBUG_m(a) if (debug & 128) a +#define DEBUG_m(a) if (curinterp && debug & 128) a #define DEBUG_f(a) if (debug & 256) a #define DEBUG_r(a) if (debug & 512) a #define DEBUG_x(a) if (debug & 1024) a @@ -748,12 +1042,14 @@ Gid_t getegid _((void)); #endif #define YYMAXDEPTH 300 +#ifndef assert /* might have been included somehow */ #define assert(what) DEB( { \ if (!(what)) { \ croak("Assertion failed: file \"%s\", line %d", \ __FILE__, __LINE__); \ exit(1); \ }}) +#endif struct ufuncs { I32 (*uf_val)_((IV, SV*)); @@ -796,7 +1092,11 @@ char *strcpy(), *strcat(); #endif #ifndef __cplusplus +#ifdef __NeXT__ /* or whatever catches all NeXTs */ +char *crypt (); /* Maybe more hosts will need the unprototyped version */ +#else char *crypt _((const char*, const char*)); +#endif char *getenv _((const char*)); Off_t lseek _((int,Off_t,int)); char *getlogin _((void)); @@ -826,13 +1126,16 @@ I32 unlnk _((char*)); #define SCAN_TR 1 #define SCAN_REPL 2 +#ifdef MYMALLOC +# ifndef DEBUGGING_MSTATS +# define DEBUGGING_MSTATS +# endif +#endif + #ifdef DEBUGGING # ifndef register # define register # endif -# ifdef MYMALLOC -# define DEBUGGING_MSTATS -# endif # define PAD_SV(po) pad_sv(po) #else # define PAD_SV(po) curpad[po] @@ -844,9 +1147,18 @@ I32 unlnk _((char*)); /* global state */ EXT PerlInterpreter * curinterp; /* currently running interpreter */ -#ifndef VMS /* VMS doesn't use environ array */ +/* VMS doesn't use environ array and NeXT has problems with crt0.o globals */ +#if !defined(VMS) && !(defined(NeXT) && defined(__DYNAMIC__)) extern char ** environ; /* environment variables supplied via exec */ -#endif +#else +# if defined(NeXT) && defined(__DYNAMIC__) + +# include +EXT char *** environ_pointer; +# define environ (*environ_pointer) +# endif +#endif /* environ processing */ + EXT int uid; /* current real user id */ EXT int euid; /* current effective user id */ EXT int gid; /* current real group id */ @@ -861,6 +1173,7 @@ EXT char ** origenviron; EXT U32 origalen; EXT U32 * profiledata; EXT int maxo INIT(MAXO);/* Number of ops */ +EXT char * osname; /* operating system */ EXT XPV* xiv_arenaroot; /* list of allocated xiv areas */ EXT IV ** xiv_root; /* free xiv list--shared by interpreters */ @@ -900,6 +1213,7 @@ EXT SV ** curpad; /* temp space */ EXT SV * Sv; +EXT HE He; EXT XPV * Xpv; EXT char buf[2048]; /* should be longer than PATH_MAX */ EXT char tokenbuf[256]; @@ -965,9 +1279,13 @@ EXT SV sv_yes; #ifdef DOINIT EXT char *sig_name[] = { SIG_NAME }; EXT int sig_num[] = { SIG_NUM }; +EXT SV * psig_ptr[sizeof(sig_num)/sizeof(*sig_num)]; +EXT SV * psig_name[sizeof(sig_num)/sizeof(*sig_num)]; #else EXT char *sig_name[]; EXT int sig_num[]; +EXT SV * psig_ptr[]; +EXT SV * psig_name[]; #endif #ifdef DOINIT @@ -1101,7 +1419,7 @@ EXT YYSTYPE nextval[5]; /* value of next token, if any */ EXT I32 nexttype[5]; /* type of next token */ EXT I32 nexttoke; -EXT FILE * VOL rsfp INIT(Nullfp); +EXT PerlIO * VOL rsfp INIT(Nullfp); EXT SV * linestr; EXT char * bufptr; EXT char * oldbufptr; @@ -1124,6 +1442,7 @@ EXT CV * compcv; /* currently compiling subroutine */ EXT AV * comppad; /* storage for lexically scoped temporaries */ EXT AV * comppad_name; /* variable names for "my" variables */ EXT I32 comppad_name_fill;/* last "introduced" variable offset */ +EXT I32 comppad_name_floor;/* start of vars in innermost block */ EXT I32 min_intro_pending;/* start of vars to introduce */ EXT I32 max_intro_pending;/* end of vars to introduce */ EXT I32 padix; /* max used index in current "register" pad */ @@ -1150,6 +1469,7 @@ EXT U32 hints; /* various compilation flags */ #define HINT_BLOCK_SCOPE 0x00000100 #define HINT_STRICT_SUBS 0x00000200 #define HINT_STRICT_VARS 0x00000400 +#define HINT_STRICT_UNTIE 0x00000800 /**************************************************************************/ /* This regexp stuff is global since it always happens within 1 expr eval */ @@ -1174,6 +1494,9 @@ EXT char * regtill; /* How far we are required to go. */ EXT U16 regflags; /* are we folding, multilining? */ EXT char regprev; /* char before regbol, \n if none */ +EXT bool do_undump; /* -u or dump seen? */ +EXT VOL U32 debug; + /***********************************************/ /* Global only to current interpreter instance */ /***********************************************/ @@ -1207,6 +1530,7 @@ IEXT SV * Iparsehook; IEXT char * Icddir; IEXT bool Iminus_c; IEXT char Ipatchlevel[10]; +IEXT char ** Ilocalpatches; IEXT SV * Inrs; IEXT char * Isplitstr IINIT(" "); IEXT bool Ipreprocess; @@ -1223,11 +1547,9 @@ IEXT bool Isawstudy; /* do fbm_instr on all strings */ IEXT bool Isawi; /* study must assume case insensitive */ IEXT bool Isawvec; IEXT bool Iunsafe; -IEXT bool Ido_undump; /* -u or dump seen? */ IEXT char * Iinplace; IEXT char * Ie_tmpname; -IEXT FILE * Ie_fp; -IEXT VOL U32 Idebug; +IEXT PerlIO * Ie_fp; IEXT U32 Iperldb; /* This value may be raised by extensions for testing purposes */ IEXT int Iperl_destruct_level; /* 0=none, 1=full, 2=full with checks */ @@ -1288,8 +1610,7 @@ IEXT HV * Idebstash; /* symbol table for perldb package */ IEXT SV * Icurstname; /* name of current package */ IEXT AV * Ibeginav; /* names of BEGIN subroutines */ IEXT AV * Iendav; /* names of END subroutines */ -IEXT AV * Ipad; /* storage for lexically scoped temporaries */ -IEXT AV * Ipadname; /* variable names for "my" variables */ +IEXT HV * Istrtab; /* shared string table */ /* memory management */ IEXT SV ** Itmps_stack; @@ -1335,6 +1656,7 @@ IEXT OP * Ieval_start; /* runtime control stuff */ IEXT COP * VOL Icurcop IINIT(&compiling); +IEXT COP * Icurcopdb IINIT(NULL); IEXT line_t Icopline IINIT(NOLINE); IEXT CONTEXT * Icxstack; IEXT I32 Icxstack_ix IINIT(-1); @@ -1343,7 +1665,7 @@ IEXT Sigjmp_buf Itop_env; IEXT I32 Irunlevel; /* stack stuff */ -IEXT AV * Istack; /* THE STACK */ +IEXT AV * Icurstack; /* THE STACK */ IEXT AV * Imainstack; /* the stack when nothing funny is happening */ IEXT SV ** Imystack_base; /* stack->array_ary */ IEXT SV ** Imystack_sp; /* stack pointer now */ @@ -1393,20 +1715,6 @@ struct interpreter { extern "C" { #endif -#ifdef __cplusplus -# ifndef I_STDARG -# define I_STDARG 1 -# endif -#endif - -#ifdef I_STDARG -# include -#else -# ifdef I_VARARGS -# include -# endif -#endif - #include "proto.h" #ifdef EMBED @@ -1433,8 +1741,10 @@ EXT MGVTBL vtbl_envelem = {0, magic_setenv, 0, magic_clearenv, 0}; EXT MGVTBL vtbl_sig = {0, 0, 0, 0, 0}; -EXT MGVTBL vtbl_sigelem = {0, magic_setsig, - 0, 0, 0}; +EXT MGVTBL vtbl_sigelem = {magic_getsig, + magic_setsig, + 0, magic_clearsig, + 0}; EXT MGVTBL vtbl_pack = {0, 0, 0, magic_wipepack, 0}; EXT MGVTBL vtbl_packelem = {magic_getpack, @@ -1590,4 +1900,13 @@ enum { }; #endif /* OVERLOAD */ +#if !defined(PERLIO_IS_STDIO) && defined(HAS_ATTRIBUTE) +/* + * Now we have __attribute__ out of the way + * Remap printf + */ +#define printf PerlIO_stdoutf +#endif + #endif /* Include guard */ +