#define aTHXo_ this,
#define PERL_OBJECT_THIS aTHXo
#define PERL_OBJECT_THIS_ aTHXo_
-#define dTHXoa(a) pTHXo = a
-#define dTHXo dTHXoa(PERL_GET_THX)
+#define dTHXoa(a) pTHXo = (CPerlObj*)a
+#define dTHXo pTHXo = PERL_GET_THX
#define pTHXx void
#define pTHXx_
# define pTHX register struct perl_thread *thr
# define aTHX thr
# define dTHR dNOOP
+# define dTHXa(a) pTHX = (struct perl_thread*)a
# else
# ifndef MULTIPLICITY
# define MULTIPLICITY
# endif
# define pTHX register PerlInterpreter *my_perl
# define aTHX my_perl
+# define dTHXa(a) pTHX = (PerlInterpreter*)a
# endif
-# define dTHXa(a) pTHX = a
-# define dTHX dTHXa(PERL_GET_THX)
+# define dTHX pTHX = PERL_GET_THX
# define pTHX_ pTHX,
# define aTHX_ aTHX,
# define pTHX_1 2
#define CALLREG_INTUIT_START CALL_FPTR(PL_regint_start)
#define CALLREG_INTUIT_STRING CALL_FPTR(PL_regint_string)
#define CALLREGFREE CALL_FPTR(PL_regfree)
-#define CALLPROTECT CALL_FPTR(PL_protect)
+
+#ifdef PERL_FLEXIBLE_EXCEPTIONS
+# define CALLPROTECT CALL_FPTR(PL_protect)
+#endif
#define NOOP (void)0
#define dNOOP extern int Perl___notused
# define aTHXo aTHX
# define aTHXo_ aTHX_
# define dTHXo dTHX
+# define dTHXoa(x) dTHXa(x)
#endif
#ifndef pTHXx
# define S_IWUSR 0200
# define S_IXUSR 0100
# endif
-# define S_IRGRP (S_IRUSR>>3)
-# define S_IWGRP (S_IWUSR>>3)
-# define S_IXGRP (S_IXUSR>>3)
-# define S_IROTH (S_IRUSR>>6)
-# define S_IWOTH (S_IWUSR>>6)
-# define S_IXOTH (S_IXUSR>>6)
+#endif
+
+#ifndef S_IRGRP
+# ifdef S_IRUSR
+# define S_IRGRP (S_IRUSR>>3)
+# define S_IWGRP (S_IWUSR>>3)
+# define S_IXGRP (S_IXUSR>>3)
+# else
+# define S_IRGRP 0040
+# define S_IWGRP 0020
+# define S_IXGRP 0010
+# endif
+#endif
+
+#ifndef S_IROTH
+# ifdef S_IRUSR
+# define S_IROTH (S_IRUSR>>6)
+# define S_IWOTH (S_IWUSR>>6)
+# define S_IXOTH (S_IXUSR>>6)
+# else
+# define S_IROTH 0040
+# define S_IWOTH 0020
+# define S_IXOTH 0010
+# endif
#endif
#ifndef S_ISUID
typedef IVTYPE IV;
typedef UVTYPE UV;
-#if defined(USE_64_BITS) && defined(HAS_QUAD)
+#if defined(USE_64_BIT_INT) && defined(HAS_QUAD)
# if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX)
# define IV_MAX INT64_MAX
# define IV_MIN INT64_MIN
typedef NVTYPE NV;
+#ifdef I_IEEEFP
+# include <ieeefp.h>
+#endif
+
#ifdef USE_LONG_DOUBLE
+# ifdef I_SUNMATH
+# include <sunmath.h>
+# endif
# define NV_DIG LDBL_DIG
+# ifdef LDBL_MANT_DIG
+# define NV_MANT_DIG LDBL_MANT_DIG
+# endif
# ifdef HAS_SQRTL
-# define Perl_modf modfl
-# define Perl_frexp frexpl
# define Perl_cos cosl
# define Perl_sin sinl
# define Perl_sqrt sqrtl
# define Perl_floor floorl
# define Perl_fmod fmodl
# endif
+/* e.g. libsunmath doesn't have modfl and frexpl as of mid-March 2000 */
+# ifdef HAS_MODFL
+# define Perl_modf(x,y) modfl(x,y)
+# else
+# define Perl_modf(x,y) ((long double)modf((double)(x),(double*)(y)))
+# endif
+# ifdef HAS_FREXPL
+# define Perl_frexp(x,y) frexpl(x,y)
+# else
+# define Perl_frexp(x,y) ((long double)frexp((double)(x),y))
+# endif
+# ifdef HAS_ISNANL
+# define Perl_isnan(x) isnanl(x)
+# else
+# ifdef HAS_ISNAN
+# define Perl_isnan(x) isnan((double)(x))
+# else
+# define Perl_isnan(x) ((x)!=(x))
+# endif
+# endif
#else
# define NV_DIG DBL_DIG
-# define Perl_modf modf
-# define Perl_frexp frexp
+# ifdef DBL_MANT_DIG
+# define NV_MANT_DIG DBL_MANT_DIG
+# endif
# define Perl_cos cos
# define Perl_sin sin
# define Perl_sqrt sqrt
# define Perl_pow pow
# define Perl_floor floor
# define Perl_fmod fmod
+# define Perl_modf(x,y) modf(x,y)
+# define Perl_frexp(x,y) frexp(x,y)
+# ifdef HAS_ISNAN
+# define Perl_isnan(x) isnan(x)
+# else
+# define Perl_isnan(x) ((x)!=(x))
+# endif
#endif
#if !defined(Perl_atof) && defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
-# if !defined(Perl_atof) && defined(HAS_STRTOLD)
+# if !defined(Perl_atof) && defined(HAS_STRTOLD)
# define Perl_atof(s) strtold(s, (char**)NULL)
# endif
# if !defined(Perl_atof) && defined(HAS_ATOLF)
#include "handy.h"
-#ifndef NO_LARGE_FILES
-# define USE_LARGE_FILES /* If available. */
-#endif
-
#if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_RAWIO)
-# define USE_64_BIT_RAWIO /* explicit */
# if LSEEKSIZE == 8 && !defined(USE_64_BIT_RAWIO)
# define USE_64_BIT_RAWIO /* implicit */
# endif
#endif
#if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO)
-# define USE_64_BIT_STDIO /* explicit */
# if FSEEKSIZE == 8 && !defined(USE_64_BIT_STDIO)
# define USE_64_BIT_STDIO /* implicit */
# endif
#ifdef VMS
# define STATUS_NATIVE PL_statusvalue_vms
# define STATUS_NATIVE_EXPORT \
- ((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms)
+ (((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ? 0x10000000 : 0))
# define STATUS_NATIVE_SET(n) \
STMT_START { \
PL_statusvalue_vms = (n); \
# define PERL_WAIT_FOR_CHILDREN NOOP
#endif
-/* the traditional thread-unsafe notion of "current interpreter".
- * XXX todo: a thread-safe version that fetches it from TLS (akin to THR)
- * needs to be defined elsewhere (conditional on pthread_getspecific()
- * availability). */
+/* the traditional thread-unsafe notion of "current interpreter". */
#ifndef PERL_SET_INTERP
# define PERL_SET_INTERP(i) (PL_curinterp = (PerlInterpreter*)(i))
#endif
#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX)
# ifdef USE_THREADS
-# define PERL_GET_THX THR
+# define PERL_GET_THX ((struct perl_thread *)PERL_GET_CONTEXT)
# else
# ifdef MULTIPLICITY
-# define PERL_GET_THX PERL_GET_INTERP
+# define PERL_GET_THX ((PerlInterpreter *)PERL_GET_CONTEXT)
# else
# ifdef PERL_OBJECT
-# define PERL_GET_THX ((CPerlObj*)PERL_GET_INTERP)
-# else
-# define PERL_GET_THX ((void*)0)
+# define PERL_GET_THX ((CPerlObj *)PERL_GET_CONTEXT)
# endif
# endif
# endif
+# define PERL_SET_THX(t) PERL_SET_CONTEXT(t)
#endif
#ifndef SVf
#if defined(__CYGWIN__)
/* USEMYBINMODE
* This symbol, if defined, indicates that the program should
- * use the routine my_binmode(FILE *fp, char iotype) to insure
+ * use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
* that a file is in "binary" mode -- that is, that no translation
* of bytes occurs on read or write operations.
*/
# define USEMYBINMODE / **/
-# define my_binmode(fp, iotype) \
- (PerlLIO_setmode(PerlIO_fileno(fp), O_BINARY) != -1 ? TRUE : FALSE)
+# define my_binmode(fp, iotype, mode) \
+ (PerlLIO_setmode(PerlIO_fileno(fp), mode) != -1 ? TRUE : FALSE)
#endif
#ifdef UNION_ANY_DEFINITION
# ifndef getenv
char *getenv (const char*);
# endif /* !getenv */
-# if !defined(EPOC) && !(defined(__hpux) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64)
+# if !defined(EPOC) && !(defined(__hpux) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) && !defined(HAS_LSEEK_PROTO)
Off_t lseek (int,Off_t,int);
# endif
# endif /* !DONT_DECLARE_STD */
#endif /* !USE_LOCALE_NUMERIC */
-#if !defined(Atol) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
-# if !defined(Atol) && defined(HAS_STRTOLL)
-# define Atol(s) strtoll(s, (char**)NULL, 10)
-# endif
-# if !defined(Atol) && defined(HAS_ATOLL)
-# define Atol atoll
+#if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
+# ifdef __hpux
+# define strtoll __strtoll /* secret handshake */
+# endif
+# if !defined(Strtol) && defined(HAS_STRTOLL)
+# define Strtol strtoll
# endif
/* is there atoq() anywhere? */
#endif
-#if !defined(Atol)
-# define Atol atol /* we assume atol being available anywhere */
+#if !defined(Strtol) && defined(HAS_STRTOL)
+# define Strtol strtol
+#endif
+#ifndef Atol
+/* It would be more fashionable to use Strtol() to define atol()
+ * (as is done for Atoul(), see below) but for backward compatibility
+ * we just assume atol(). */
+# if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL)
+# define Atol atoll
+# else
+# define Atol atol
+# endif
#endif
-#if !defined(Strtoul) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
+#if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
+# ifdef __hpux
+# define strtoull __strtoull /* secret handshake */
+# endif
# if !defined(Strtoul) && defined(HAS_STRTOULL)
-# define Strtoul strtoull
+# define Strtoul strtoull
+# endif
+# if !defined(Strtoul) && defined(HAS_STRTOUQ)
+# define Strtoul strtouq
# endif
-#endif
/* is there atouq() anywhere? */
-#if !defined(Strtoul) && defined(HAS_STRTOUQ)
-# define Strtoul strtouq
#endif
-#if !defined(Strtoul)
-# define Strtoul strtoul /* we assume strtoul being available anywhere */
+#if !defined(Strtoul) && defined(HAS_STRTOUL)
+# define Strtoul strtoul
+#endif
+#ifndef Atoul
+# define Atoul(s) Strtoul(s, (char **)NULL, 10)
#endif
#if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE)
#define printf PerlIO_stdoutf
#endif
+/* if these never got defined, they need defaults */
+#ifndef PERL_SET_CONTEXT
+# define PERL_SET_CONTEXT(i) PERL_SET_INTERP(i)
+#endif
+
+#ifndef PERL_GET_CONTEXT
+# define PERL_GET_CONTEXT PERL_GET_INTERP
+#endif
+
+#ifndef PERL_GET_THX
+# define PERL_GET_THX ((void*)NULL)
+#endif
+
+#ifndef PERL_SET_THX
+# define PERL_SET_THX(t) NOOP
+#endif
+
#ifndef PERL_SCRIPT_MODE
#define PERL_SCRIPT_MODE "r"
#endif
# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun)
# else
# ifdef USE_SEMCTL_SEMID_DS
-# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
+# ifdef EXTRA_F_IN_SEMUN_BUF
+# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buff)
+# else
+# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
+# endif
# endif
# endif
#endif
#ifdef I_FCNTL
# include <fcntl.h>
-#else
-# ifndef O_RDONLY
+#endif
+
+#ifdef I_SYS_FILE
+# include <sys/file.h>
+#endif
+
+#ifndef O_RDONLY
/* Assume UNIX defaults */
# define O_RDONLY 0000
# define O_WRONLY 0001
# define O_RDWR 0002
# define O_CREAT 0100
-# endif
#endif
-#ifdef I_SYS_FILE
-# include <sys/file.h>
+#ifndef O_BINARY
+# define O_BINARY 0
#endif
+#ifndef O_TEXT
+# define O_TEXT 0
+#endif
#ifdef IAMSUID
HAS_GETCWD
- HAS-MMAP
+ HAS_MMAP
HAS_MPROTECT
HAS_MSYNC
- HAS_MADVSISE
+ HAS_MADVISE
HAS_MUNMAP
I_SYSMMAN
Mmap_t