X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl.h;h=8f1cad367ef8c6e388023f7a70766b846fe63125;hb=40b7a5f5e789eb31046d021a15e48b502ad8e1e9;hp=0adb8bf07f6832a17600923799f33c5c45a5f550;hpb=106bc2206dac2e824f7be45266a9170702354615;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perl.h b/perl.h index 0adb8bf..8f1cad3 100644 --- a/perl.h +++ b/perl.h @@ -225,8 +225,20 @@ struct perl_thread; # define CALLPROTECT CALL_FPTR(PL_protect) #endif +#ifdef HASATTRIBUTE +# define PERL_UNUSED_DECL __attribute__((unused)) +#else +# define PERL_UNUSED_DECL +#endif + +/* gcc -Wall: + * for silencing unused variables that are actually used most of the time, + * but we cannot quite get rid of, such `ax' in PPCODE+noargs xsubs + */ +#define PERL_UNUSED_VAR(var) if (0) var = var + #define NOOP (void)0 -#define dNOOP extern int Perl___notused __attribute__ ((unused)) +#define dNOOP extern int Perl___notused PERL_UNUSED_DECL #ifndef pTHX # define pTHX void @@ -258,6 +270,15 @@ struct perl_thread; # define dTHXx dTHX #endif +/* Under PERL_IMPLICIT_SYS (used in Windows for fork emulation) + * PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...). + * dTHXs is therefore needed for all functions using PerlIO_foo(). */ +#ifdef PERL_IMPLICIT_SYS +# define dTHXs dTHX +#else +# define dTHXs dNOOP +#endif + #undef START_EXTERN_C #undef END_EXTERN_C #undef EXTERN_C @@ -339,15 +360,15 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); */ /* define this once if either system, instead of cluttering up the src */ -#if defined(MSDOS) || defined(atarist) || defined(WIN32) +#if defined(MSDOS) || defined(atarist) || defined(WIN32) || defined(NETWARE) #define DOSISH 1 #endif -#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC) +#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC) || defined(NETWARE) # define STANDARD_C 1 #endif -#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX) || defined( EPOC) || defined(__QNX__) +#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX) || defined( EPOC) || defined(__QNX__) || defined(NETWARE) # define DONT_DECLARE_STD 1 #endif @@ -506,6 +527,14 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); # include #endif +#if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO) +int syscall(int, ...); +#endif + +#if defined(HAS_USLEEP) && !defined(HAS_USLEEP_PROTO) +int usleep(unsigned int); +#endif + #ifdef PERL_MICRO /* Last chance to export Perl_my_swap */ # define MYSWAP #endif @@ -748,6 +777,9 @@ typedef struct perl_mstats perl_mstats_t; # endif # endif # ifdef I_NETDB +# ifdef NETWARE +# include +# endif # include # endif # ifndef ENOTSOCK @@ -757,6 +789,12 @@ typedef struct perl_mstats perl_mstats_t; # endif #endif +/* sockatmark() is so new (2001) that many places might have it hidden + * behind some -D_BLAH_BLAH_SOURCE guard. */ +#if defined(HAS_SOCKATMARK) && !defined(HAS_SOCKATMARK_PROTO) +int sockatmark(int); +#endif + #ifdef SETERRNO # undef SETERRNO /* SOCKS might have defined this */ #endif @@ -1093,23 +1131,9 @@ typedef UVTYPE UV; # endif #endif -/* - I've tracked down a weird bug in Perl5.6.1 to the UTS compiler's - mishandling of MY_UV_MAX in util.c. It is defined as - #ifndef MY_UV_MAX - # define MY_UV_MAX ((UV)IV_MAX * (UV)2 + (UV)1) - #endif - The compiler handles {double floating point value} >= MY_UV_MAX as if - MY_UV_MAX were the signed integer -1. In fact it will do the same - thing with (UV)(0xffffffff), in place of MY_UV_MAX, though 0xffffffff - *without* the typecast to UV works fine. - - hom00@utsglobal.com (Hal Morris) 2001-05-02 - - */ - -#ifdef UTS -# define MY_UV_MAX 0xffffffff +#if defined(uts) || defined(UTS) +# undef UV_MAX +# define UV_MAX (4294967295u) #endif #define IV_DIG (BIT_DIGITS(IVSIZE * 8)) @@ -1714,6 +1738,22 @@ typedef struct ptr_tbl PTR_TBL_t; # define NEED_ENVIRON_DUP_FOR_MODIFY #endif +/* + * initialise to avoid floating-point exceptions from overflow, etc + */ +#ifndef PERL_FPU_INIT +# ifdef HAS_FPSETMASK +# if HAS_FLOATINGPOINT_H +# include +# endif +# define PERL_FPU_INIT fpsetmask(0); +# elif PERL_IGNORE_FPUSIG +# define PERL_FPU_INIT signal(PERL_IGNORE_FPUSIG, SIG_IGN); +# else +# define PERL_FPU_INIT +# endif +#endif + #ifndef PERL_SYS_INIT3 # define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp) #endif @@ -1753,6 +1793,9 @@ typedef struct ptr_tbl PTR_TBL_t; * atomic.h everywhere */ # define EMULATE_ATOMIC_REFCOUNTS # endif +# ifdef NETWARE +# include +# else # ifdef FAKE_THREADS # include "fakethr.h" # else @@ -1783,12 +1826,17 @@ typedef pthread_key_t perl_key; # endif /* OS2 */ # endif /* WIN32 */ # endif /* FAKE_THREADS */ +#endif /* NETWARE */ #endif /* USE_THREADS || USE_ITHREADS */ #ifdef WIN32 # include "win32.h" #endif +#ifdef NETWARE +# include "netware.h" +#endif + #ifdef VMS # define STATUS_NATIVE PL_statusvalue_vms # define STATUS_NATIVE_EXPORT \ @@ -2471,10 +2519,12 @@ I32 unlnk (char*); #define UNLINK PerlLIO_unlink #endif -#ifndef HAS_SETRESUID_PROTO /* some versions of glibc */ +/* some versions of glibc are missing the setresuid() proto */ +#if defined(HAS_SETRESUID) && !defined(HAS_SETRESUID_PROTO) int setresuid(uid_t ruid, uid_t euid, uid_t suid); #endif -#ifndef HAS_SETRESUID_PROTO /* some versions of glibc */ +/* some versions of glibc are missing the setresgid() proto */ +#if defined(HAS_SETRESGID) && !defined(HAS_SETRESGID_PROTO) int setresgid(gid_t rgid, gid_t egid, gid_t sgid); #endif @@ -3434,12 +3484,6 @@ typedef struct am_table_short AMTS; #define IN_LOCALE \ (PL_curcop == &PL_compiling ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) -#define IS_NUMERIC_RADIX(s, send) \ - (PL_numeric_radix_sv \ - && IN_LOCALE \ - && SvCUR(PL_numeric_radix_sv) <= ((send)-(s)) \ - && memEQ(s, SvPVX(PL_numeric_radix_sv), SvCUR(PL_numeric_radix_sv))) - #define STORE_NUMERIC_LOCAL_SET_STANDARD() \ bool was_local = PL_numeric_local && IN_LOCALE; \ if (was_local) SET_NUMERIC_STANDARD(); @@ -3460,12 +3504,13 @@ typedef struct am_table_short AMTS; #define SET_NUMERIC_STANDARD() /**/ #define SET_NUMERIC_LOCAL() /**/ -#define IS_NUMERIC_RADIX(c) (0) +#define IS_NUMERIC_RADIX(a, b) (0) #define STORE_NUMERIC_LOCAL_SET_STANDARD() /**/ #define STORE_NUMERIC_STANDARD_SET_LOCAL() /**/ #define RESTORE_NUMERIC_LOCAL() /**/ #define RESTORE_NUMERIC_STANDARD() /**/ #define Atof Perl_atof +#define IN_LOCALE_RUNTIME 0 #endif /* !USE_LOCALE_NUMERIC */ @@ -3565,7 +3610,9 @@ typedef struct am_table_short AMTS; #ifndef PERL_MICRO # ifndef PERL_OLD_SIGNALS -# define PERL_ASYNC_CHECK() if (PL_sig_pending) despatch_signals() +# ifndef PERL_ASYNC_CHECK +# define PERL_ASYNC_CHECK() if (PL_sig_pending) despatch_signals() +# endif # endif #endif @@ -3643,6 +3690,10 @@ typedef struct am_table_short AMTS; # include #endif +#if defined(HAS_FLOCK) && !defined(HAS_FLOCK_PROTO) +int flock(int fd, int op); +#endif + #ifndef O_RDONLY /* Assume UNIX defaults */ # define O_RDONLY 0000 @@ -3712,6 +3763,24 @@ typedef struct am_table_short AMTS; #define EXEC_ARGV_CAST(x) x #endif +#define IS_NUMBER_IN_UV 0x01 /* number within UV range (maybe not + int). value returned in pointed- + to UV */ +#define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 /* pointed to UV undefined */ +#define IS_NUMBER_NOT_INT 0x04 /* saw . or E notation */ +#define IS_NUMBER_NEG 0x08 /* leading minus sign */ +#define IS_NUMBER_INFINITY 0x10 /* this is big */ + +#define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) + +/* to let user control profiling */ +#ifdef PERL_GPROF_CONTROL +extern void moncontrol(int); +#define PERL_GPROF_MONCONTROL(x) moncontrol(x) +#else +#define PERL_GPROF_MONCONTROL(x) +#endif + /* and finally... */ #define PERL_PATCHLEVEL_H_IMPLICIT #include "patchlevel.h" @@ -3756,6 +3825,10 @@ typedef struct am_table_short AMTS; HAS_STRUCT_MSGHDR HAS_STRUCT_CMSGHDR + USE_REENTRANT_API + + HAS_NL_LANGINFO + so that Configure picks them up. */ #endif /* Include guard */