e576bb2002-10-11Martin Nilsson /* || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information.
74b3d32003-12-07Marcus Comstedt || $Id: global.h,v 1.95 2003/12/07 19:42:03 marcus Exp $
e576bb2002-10-11Martin Nilsson */
24ddc71998-03-28Henrik Grubbström (Grubba) 
5267b71995-08-09Fredrik Hübinette (Hubbe) #ifndef GLOBAL_H #define GLOBAL_H
cb22561995-10-11Fredrik Hübinette (Hubbe) 
7fbe091999-05-11Fredrik Hübinette (Hubbe) #if defined(__WINNT__) && !defined(__NT__) #define __NT__ #endif
a2326e1998-03-25Per Hedbor #ifndef _LARGEFILE_SOURCE # define _FILE_OFFSET_BITS 64 # define _LARGEFILE_SOURCE
fedf131998-03-25Fredrik Hübinette (Hubbe) # define _LARGEFILE64_SOURCE 1
a2326e1998-03-25Per Hedbor #endif
90dc921998-06-12Fredrik Noring /* HPUX needs these too... */ #ifndef __STDC_EXT__ # define __STDC_EXT__ #endif /* !__STDC_EXT__ */
ada73b1999-07-15Henrik Grubbström (Grubba) #ifndef _PROTOTYPES # define _PROTOTYPES #endif /* !_PROTOTYPES */
90dc921998-06-12Fredrik Noring 
e31ef42003-03-12Henrik Grubbström (Grubba) /* And Linux wants this one... */ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif /* !_GNU_SOURCE */
b401a52003-05-02Henrik Grubbström (Grubba) #ifdef __NT__
636e852003-04-30Henrik Grubbström (Grubba) /* To get <windows.h> to stop including the entire OS, * we need to define this one. */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif
b401a52003-05-02Henrik Grubbström (Grubba) /* We also need to ensure that we get the WIN32 APIs. */ #ifndef WIN32 #define WIN32 100 /* WinNT 1.0 */ #endif #endif /* __NT__ */
44e2942000-08-11Henrik Grubbström (Grubba) /* * We want to use __builtin functions. */ #ifndef __BUILTIN_VA_ARG_INCR #define __BUILTIN_VA_ARG_INCR 1 #endif /* !__BUILTIN_VA_ARG_INCR */
5267b71995-08-09Fredrik Hübinette (Hubbe) /* * Some structure forward declarations are needed. */ /* This is needed for linux */ #ifdef MALLOC_REPLACED #define NO_FIX_MALLOC #endif
211d6b1996-12-05Fredrik Hübinette (Hubbe) #ifndef STRUCT_PROGRAM_DECLARED #define STRUCT_PROGRAM_DECLARED
5267b71995-08-09Fredrik Hübinette (Hubbe) struct program;
211d6b1996-12-05Fredrik Hübinette (Hubbe) #endif
5267b71995-08-09Fredrik Hübinette (Hubbe) struct function;
211d6b1996-12-05Fredrik Hübinette (Hubbe) #ifndef STRUCT_SVALUE_DECLARED #define STRUCT_SVALUE_DECLARED
5267b71995-08-09Fredrik Hübinette (Hubbe) struct svalue;
211d6b1996-12-05Fredrik Hübinette (Hubbe) #endif
5267b71995-08-09Fredrik Hübinette (Hubbe) struct sockaddr; struct object; struct array; struct svalue;
ee83561998-08-07Henrik Grubbström (Grubba) #ifndef STRUCT_TIMEVAL_DECLARED #define STRUCT_TIMEVAL_DECLARED struct timeval; #endif
83b1842003-02-08Martin Stjernholm #ifndef CONFIGURE_TEST /* machine.h doesn't exist if we're included from a configure test * program. In that case these defines will already be included. */
cb22561995-10-11Fredrik Hübinette (Hubbe) #include "machine.h"
83b1842003-02-08Martin Stjernholm #endif
189fd01997-01-28Fredrik Hübinette (Hubbe)  /* * Max number of local variables in a function. * Currently there is no support for more than 256 */ #define MAX_LOCAL 256 /* * define NO_GC to get rid of garbage collection */ #ifndef NO_GC #define GC2 #endif
5267b71995-08-09Fredrik Hübinette (Hubbe) 
75920f1997-12-28Fredrik Hübinette (Hubbe) #if defined(i386) #ifndef HANDLES_UNALIGNED_MEMORY_ACCESS #define HANDLES_UNALIGNED_MEMORY_ACCESS #endif #endif
cb22561995-10-11Fredrik Hübinette (Hubbe) /* AIX requires this to be the first thing in the file. */
44e2942000-08-11Henrik Grubbström (Grubba) #if HAVE_ALLOCA_H # include <alloca.h> # ifdef __GNUC__ # ifdef alloca # undef alloca # endif # define alloca __builtin_alloca # endif
cb22561995-10-11Fredrik Hübinette (Hubbe) #else
44e2942000-08-11Henrik Grubbström (Grubba) # ifdef __GNUC__ # ifdef alloca # undef alloca # endif # define alloca __builtin_alloca
cb22561995-10-11Fredrik Hübinette (Hubbe) # else # ifdef _AIX
5c8e891995-10-29Fredrik Hübinette (Hubbe)  #pragma alloca
cb22561995-10-11Fredrik Hübinette (Hubbe) # else # ifndef alloca /* predefined by HP cc +Olibcalls */
44e2942000-08-11Henrik Grubbström (Grubba) void *alloca();
cb22561995-10-11Fredrik Hübinette (Hubbe) # endif # endif # endif
5401b61999-08-06Fredrik Hübinette (Hubbe) #endif #ifdef __NT__ /* We are running NT */
6ec4532003-04-15Martin Nilsson #undef FD_SETSIZE
5401b61999-08-06Fredrik Hübinette (Hubbe) #define FD_SETSIZE MAX_OPEN_FILEDESCRIPTORS
cb22561995-10-11Fredrik Hübinette (Hubbe) #endif
5267b71995-08-09Fredrik Hübinette (Hubbe) #include <stdio.h> #ifdef HAVE_STDLIB_H #include <stdlib.h>
a4e1c41996-08-06Fredrik Hübinette (Hubbe) #undef HAVE_STDLIB_H
5267b71995-08-09Fredrik Hübinette (Hubbe) #endif
ada73b1999-07-15Henrik Grubbström (Grubba) #ifdef HAVE_STDDEF_H
1e577b1999-07-15Fredrik Hübinette (Hubbe) #include <stddef.h>
ada73b1999-07-15Henrik Grubbström (Grubba) #undef HAVE_STDDEF_H
1e577b1999-07-15Fredrik Hübinette (Hubbe) #endif
75920f1997-12-28Fredrik Hübinette (Hubbe) #ifdef HAVE_MALLOC_H
31c8ed2003-04-17Xavier Beaudouin #if !defined(__FreeBSD__) && !defined(__OpenBSD__)
2139ba2003-04-16Xavier Beaudouin /* FreeBSD and OpenBSD has <malloc.h>, but it just contains a warning... */
75920f1997-12-28Fredrik Hübinette (Hubbe) #include <malloc.h>
31c8ed2003-04-17Xavier Beaudouin #endif /* !__FreeBSD__ && !__OpenBSD */
75920f1997-12-28Fredrik Hübinette (Hubbe) #undef HAVE_MALLOC_H #endif
5267b71995-08-09Fredrik Hübinette (Hubbe) #ifdef HAVE_UNISTD_H #include <unistd.h>
a4e1c41996-08-06Fredrik Hübinette (Hubbe) #undef HAVE_UNISTD_H
5267b71995-08-09Fredrik Hübinette (Hubbe) #endif #ifdef HAVE_STRING_H #include <string.h>
a4e1c41996-08-06Fredrik Hübinette (Hubbe) #undef HAVE_STRING_H
5267b71995-08-09Fredrik Hübinette (Hubbe) #endif
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) #ifdef HAVE_LIMITS_H #include <limits.h> #undef HAVE_LIMITS_H
5267b71995-08-09Fredrik Hübinette (Hubbe) #endif
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> #undef HAVE_SYS_TYPES_H
419ede1996-11-13Fredrik Hübinette (Hubbe) #endif
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) #ifdef HAVE_MEMORY_H #include <memory.h> #undef HAVE_MEMORY_H
5267b71995-08-09Fredrik Hübinette (Hubbe) #endif
b4dd8c1999-06-19Fredrik Hübinette (Hubbe) #ifdef HAVE_WINDOWS_H #include <windows.h> #undef HAVE_WINDOWS_H #endif
8ae0492003-11-07Martin Stjernholm #include <float.h>
4087a12003-05-01Henrik Grubbström (Grubba) /* Get INT64, INT32, INT16, INT8, et al. */ #include "pike_int_types.h"
2b0d732000-01-09Fredrik Hübinette (Hubbe) 
bed9601997-05-19Fredrik Hübinette (Hubbe) #define SIZE_T unsigned INT32
7e877a2003-04-02Martin Stjernholm #define TYPE_T unsigned int
bed9601997-05-19Fredrik Hübinette (Hubbe) #define TYPE_FIELD unsigned INT16
6d22541998-01-28Fredrik Hübinette (Hubbe) #define B1_T char
bed9601997-05-19Fredrik Hübinette (Hubbe) 
6d22541998-01-28Fredrik Hübinette (Hubbe) #if SIZEOF_SHORT == 2 #define B2_T short #elif SIZEOF_INT == 2 #define B2_T int #endif #if SIZEOF_SHORT == 4 #define B4_T short #elif SIZEOF_INT == 4 #define B4_T int #elif SIZEOF_LONG == 4 #define B4_T long #endif #if SIZEOF_INT == 8 #define B8_T int #elif SIZEOF_LONG == 8 #define B8_T long
3f3e4d2000-08-03Henrik Grubbström (Grubba) #elif (SIZEOF_LONG_LONG - 0) == 8 #define B8_T long long #elif (SIZEOF___INT64 - 0) == 8 #define B8_T __int64
6d22541998-01-28Fredrik Hübinette (Hubbe) #elif SIZEOF_CHAR_P == 8 #define B8_T char * #elif defined(B4_T) struct b8_t_s { B4_T x,y; };
52fcc81998-01-28Fredrik Hübinette (Hubbe) #define B8_T struct b8_t_s
6d22541998-01-28Fredrik Hübinette (Hubbe) #endif
52fcc81998-01-28Fredrik Hübinette (Hubbe) #if defined(B8_T)
2de1181998-01-28Fredrik Hübinette (Hubbe) struct b16_t_s { B8_T x,y; };
52fcc81998-01-28Fredrik Hübinette (Hubbe) #define B16_T struct b16_t_s
6d22541998-01-28Fredrik Hübinette (Hubbe) #endif
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) 
4087a12003-05-01Henrik Grubbström (Grubba) /* INT_TYPE stuff */ #ifndef MAX_INT_TYPE # if defined (WITH_SHORT_INT) # define MAX_INT_TYPE SHRT_MAX # define MIN_INT_TYPE SHRT_MIN # define PRINTPIKEINT "h"
7c1a312003-11-07Martin Stjernholm # define INT_ARG_TYPE int
4087a12003-05-01Henrik Grubbström (Grubba)  # elif defined (WITH_INT_INT) # define MAX_INT_TYPE INT_MAX # define MIN_INT_TYPE INT_MIN # define PRINTPIKEINT "" # elif defined (WITH_LONG_INT) # define MAX_INT_TYPE LONG_MAX # define MIN_INT_TYPE LONG_MIN # define PRINTPIKEINT "l" # elif defined (WITH_LONG_LONG_INT) # ifdef LLONG_MAX # define MAX_INT_TYPE LLONG_MAX # define MIN_INT_TYPE LLONG_MIN # else # define MAX_INT_TYPE LONG_LONG_MAX # define MIN_INT_TYPE LONG_LONG_MIN # endif # define PRINTPIKEINT "ll" # endif #endif
7c1a312003-11-07Martin Stjernholm /* INT_ARG_TYPE is a type suitable for argument passing that at least * can hold an INT_TYPE value. */ #ifndef INT_ARG_TYPE #define INT_ARG_TYPE INT_TYPE #endif
4087a12003-05-01Henrik Grubbström (Grubba) #if SIZEOF_INT_TYPE - 0 == 0 # error Unsupported type chosen for native pike integers. #endif #if SIZEOF_INT_TYPE != 4 # define INT_TYPE_INT32_CONVERSION #endif /* FLOAT_TYPE stuff */ #if defined (WITH_LONG_DOUBLE_PRECISION_SVALUE)
8ae0492003-11-07Martin Stjernholm  # define PIKEFLOAT_MANT_DIG LDBL_MANT_DIG # define PIKEFLOAT_DIG LDBL_DIG # define PIKEFLOAT_MIN_EXP LDBL_MIN_EXP # define PIKEFLOAT_MAX_EXP LDBL_MAX_EXP # define PIKEFLOAT_MIN_10_EXP LDBL_MIN_10_EXP # define PIKEFLOAT_MAX_10_EXP LDBL_MAX_10_EXP # define PIKEFLOAT_MAX LDBL_MAX # define PIKEFLOAT_MIN LDBL_MIN # define PIKEFLOAT_EPSILON LDBL_EPSILON # define PRINTPIKEFLOAT "L"
4087a12003-05-01Henrik Grubbström (Grubba) #elif defined (WITH_DOUBLE_PRECISION_SVALUE)
8ae0492003-11-07Martin Stjernholm  # define PIKEFLOAT_MANT_DIG DBL_MANT_DIG # define PIKEFLOAT_DIG DBL_DIG # define PIKEFLOAT_MIN_EXP DBL_MIN_EXP # define PIKEFLOAT_MAX_EXP DBL_MAX_EXP # define PIKEFLOAT_MIN_10_EXP DBL_MIN_10_EXP # define PIKEFLOAT_MAX_10_EXP DBL_MAX_10_EXP # define PIKEFLOAT_MAX DBL_MAX # define PIKEFLOAT_MIN DBL_MIN # define PIKEFLOAT_EPSILON DBL_EPSILON # define PRINTPIKEFLOAT ""
4087a12003-05-01Henrik Grubbström (Grubba) #else
8ae0492003-11-07Martin Stjernholm  # define PIKEFLOAT_MANT_DIG FLT_MANT_DIG # define PIKEFLOAT_DIG FLT_DIG # define PIKEFLOAT_MIN_EXP FLT_MIN_EXP # define PIKEFLOAT_MAX_EXP FLT_MAX_EXP # define PIKEFLOAT_MIN_10_EXP FLT_MIN_10_EXP # define PIKEFLOAT_MAX_10_EXP FLT_MAX_10_EXP # define PIKEFLOAT_MAX FLT_MAX # define PIKEFLOAT_MIN FLT_MIN # define PIKEFLOAT_EPSILON FLT_EPSILON # define PRINTPIKEFLOAT ""
7c1a312003-11-07Martin Stjernholm # define FLOAT_ARG_TYPE double #endif
8ae0492003-11-07Martin Stjernholm 
7c1a312003-11-07Martin Stjernholm /* FLOAT_ARG_TYPE is a type suitable for argument passing that at * least can hold a FLOAT_TYPE value. */ #ifndef FLOAT_ARG_TYPE #define FLOAT_ARG_TYPE FLOAT_TYPE
4087a12003-05-01Henrik Grubbström (Grubba) #endif #if SIZEOF_FLOAT_TYPE - 0 == 0 #error Unsupported type chosen for pike floats. #endif
3e625c1998-10-11Fredrik Hübinette (Hubbe) typedef unsigned char p_wchar0; typedef unsigned INT16 p_wchar1; typedef unsigned INT32 p_wchar2;
3ef4661999-02-27Henrik Grubbström (Grubba) typedef struct p_wchar_p { p_wchar0 *ptr; int shift; } PCHARP;
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) 
0378a22003-02-11Martin Stjernholm #ifndef CONFIGURE_TEST
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) #define RCSID(X) \ static char *rcsid __attribute__ ((unused)) =X #elif __GNUC__ == 2 #define RCSID(X) \ static char *rcsid = X; \ static void *use_rcsid=(&use_rcsid, (void *)&rcsid) #else #define RCSID(X) \ static char *rcsid = X
bed9601997-05-19Fredrik Hübinette (Hubbe) #endif
0378a22003-02-11Martin Stjernholm #else #define RCSID(X) #endif
bed9601997-05-19Fredrik Hübinette (Hubbe) 
ae95031999-04-07Fredrik Hübinette (Hubbe) #ifdef PIKE_DEBUG #define DO_IF_DEBUG(X) X #else #define DO_IF_DEBUG(X)
5189632001-06-04Martin Stjernholm #define NDEBUG
ae95031999-04-07Fredrik Hübinette (Hubbe) #endif
a8a8132002-09-13Martin Stjernholm #ifdef INTERNAL_PROFILING #define DO_IF_INTERNAL_PROFILING(X) X #else #define DO_IF_INTERNAL_PROFILING(X) #endif
71f3a21998-11-22Fredrik Hübinette (Hubbe) #if defined(__GNUC__) && !defined(PIKE_DEBUG) && !defined(lint)
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) #define INLINE inline #else #define INLINE #endif
bed9601997-05-19Fredrik Hübinette (Hubbe) 
2ba1a42003-03-29Henrik Grubbström (Grubba) /* PMOD_EXPORT exports a function / variable / whatever.
1f21332000-07-28Fredrik Hübinette (Hubbe)  * Putting PMOD_PROTO in front of a prototype does nothing. */ #ifndef PMOD_EXPORT
2ba1a42003-03-29Henrik Grubbström (Grubba) #ifdef __NT__ #ifdef DYNAMIC_MODULE #ifdef _M_IA64 /* Make sure we use long calls to functions in the main binary. */ #define PMOD_EXPORT __declspec(dllimport) #endif /* _M_IA64 */ #else /* !DYNAMIC_MODULE */ /* #define PMOD_EXPORT __declspec(dllexport) */ #endif /* DYNAMIC_MODULE */ #endif /* __NT__ */ #ifndef PMOD_EXPORT
1f21332000-07-28Fredrik Hübinette (Hubbe) #define PMOD_EXPORT
2ba1a42003-03-29Henrik Grubbström (Grubba) #endif /* !PMOD_EXPORT */ #endif /* !PMOD_EXPORT */
1f21332000-07-28Fredrik Hübinette (Hubbe)  /* PMOD_PROTO is essentially the same as PMOD_EXPORT, but * it exports the identifier even if it only a prototype. */ #ifndef PMOD_PROTO #define PMOD_PROTO #endif
27f0252002-11-25Martin Stjernholm #if defined(PURIFY) || defined(__CHECKER__) || \ defined(DEBUG_MALLOC) || defined(USE_VALGRIND)
ae95031999-04-07Fredrik Hübinette (Hubbe) #define DO_PIKE_CLEANUP #endif
ec2bab2000-06-24Fredrik Hübinette (Hubbe) #ifdef PIKE_SECURITY #define DO_IF_SECURITY(X) X #else #define DO_IF_SECURITY(X) #endif
9b81632000-08-07Henrik Grubbström (Grubba) /* Used by the AutoBuild system to mark known warnings. */ #define DO_NOT_WARN(X) (X)
ec2bab2000-06-24Fredrik Hübinette (Hubbe) 
eef59f2000-08-17Henrik Grubbström (Grubba) /* Some functions/macros used to avoid loss of precision warnings. */ #ifdef __ECL static inline long PTRDIFF_T_TO_LONG(ptrdiff_t x) { return DO_NOT_WARN((long)x); } #else /* !__ECL */ #define PTRDIFF_T_TO_LONG(x) ((long)(x)) #endif /* __ECL */
5267b71995-08-09Fredrik Hübinette (Hubbe) #include "port.h"
61e9a01998-01-25Fredrik Hübinette (Hubbe) #include "dmalloc.h"
e83eb92001-03-22Fredrik Hübinette (Hubbe) #include "pike_cpulib.h"
5267b71995-08-09Fredrik Hübinette (Hubbe)  #ifdef BUFSIZ #define PROT_STDIO(x) PROT(x) #else #define PROT_STDIO(x) () #endif #ifdef __STDC__ #define PROT(x) x #else #define PROT(x) () #endif #ifdef MALLOC_DECL_MISSING char *malloc PROT((int)); char *realloc PROT((char *,int)); void free PROT((char *)); char *calloc PROT((int,int)); #endif #ifdef GETPEERNAME_DECL_MISSING int getpeername PROT((int, struct sockaddr *, int *)); #endif #ifdef GETHOSTNAME_DECL_MISSING void gethostname PROT((char *,int)); #endif #ifdef POPEN_DECL_MISSING FILE *popen PROT((char *,char *)); #endif #ifdef GETENV_DECL_MISSING char *getenv PROT((char *)); #endif
8301e42000-08-20Henrik Grubbström (Grubba) #ifdef USE_CRYPT_C
74b3d32003-12-07Marcus Comstedt char *crypt(const char *, const char *);
8301e42000-08-20Henrik Grubbström (Grubba) #endif /* USE_CRYPT_C */
21aa9b2000-12-13Fredrik Hübinette (Hubbe) /* If this define is present, error() has been renamed to Pike_error() and * error.h has been renamed to pike_error.h * Expect to see other similar defines in the future. -Hubbe */ #define Pike_error_present
3913502002-06-25Henrik Grubbström (Grubba) /* Compatibility... */ #define USE_PIKE_TYPE 2
d68a072001-02-20Henrik Grubbström (Grubba) 
aad99b2001-03-28Fredrik Hübinette (Hubbe) #ifdef PIKE_RUN_UNLOCKED #define DO_IF_RUN_UNLOCKED(X) X #else #define DO_IF_RUN_UNLOCKED(X) #endif
3a2a732002-04-09Mikael Brandström /* Used in more than one place, better put it here */ #if defined(PROFILING) && defined(HAVE_GETHRTIME) #define DO_IF_PROFILING(X) X #else #define DO_IF_PROFILING(X) #endif
5267b71995-08-09Fredrik Hübinette (Hubbe) #endif