X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl.h;h=02a55f2a60d69ffbb1bdb12e059ac2d9a1a68ed4;hb=69969c6f8dad38fedd2ed2c653a7948030e5ecf8;hp=427fba76be08461da1bc93517f6b2e0ee32a4c9f;hpb=760ac839baf413929cd31cc32ffd6dba6b781a81;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perl.h b/perl.h index 427fba7..02a55f2 100644 --- a/perl.h +++ b/perl.h @@ -91,26 +91,54 @@ #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 -# 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. */ @@ -253,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) @@ -536,6 +557,19 @@ #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 @@ -548,9 +582,17 @@ # 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. @@ -572,8 +614,104 @@ #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 +# define PERL_LONG_MAX LONG_MAX #else # ifdef MAXLONG /* Often used in */ # define PERL_LONG_MAX MAXLONG @@ -583,17 +721,17 @@ #endif #ifdef LONG_MIN -#define PERL_LONG_MIN LONG_MIN +# define PERL_LONG_MIN LONG_MIN #else # ifdef MINLONG # define PERL_LONG_MIN MINLONG # else -# define PERL_LONG_MIN (-LONG_MAX - ((3 & -1) == 3)) +# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) # endif #endif #ifdef ULONG_MAX -#define PERL_ULONG_MAX ULONG_MAX +# define PERL_ULONG_MAX ULONG_MAX #else # ifdef MAXULONG # define PERL_ULONG_MAX MAXULONG @@ -602,10 +740,28 @@ # endif #endif -#ifdef ULONG_MIN -#define PERL_ULONG_MIN ULONG_MIN -#else -# define ULONG_MIN 0L +#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; @@ -678,16 +834,15 @@ typedef I32 (*filter_t) _((int, SV *, int)); # endif # endif #endif - -#ifndef SH_PATH /* May be a variable. */ -# define SH_PATH BIN_SH -#ifndef BIN_SH -# define BIN_SH "/bin/sh" -#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 @@ -790,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))) @@ -801,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 @@ -875,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*)); @@ -923,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)); @@ -1040,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]; @@ -1735,3 +1909,4 @@ enum { #endif #endif /* Include guard */ +