pike.git/src/global.h:7:
#ifndef GLOBAL_H
#define GLOBAL_H
/* Mingw32 workarounds */
#if (defined(__WINNT__) || defined(__WIN32__)) && !defined(__NT__)
#define __NT__
#endif
#ifndef _LARGEFILE_SOURCE
# define _FILE_OFFSET_BITS 64
+ # define _TIME_BITS 64
# define _LARGEFILE_SOURCE
/* # define _LARGEFILE64_SOURCE 1 */ /* This one is for explicit 64bit. */
#endif
/* HPUX needs these too... */
#ifndef __STDC_EXT__
# define __STDC_EXT__
#endif /* !__STDC_EXT__ */
#ifndef _PROTOTYPES
# define _PROTOTYPES
pike.git/src/global.h:57:
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x05ff
#endif
/* In later versions of the WIN32 SDKs, we also need to define this one. */
#if !defined(NTDDI_VERSION) || (NTDDI_VERSION < 0x05ffffff)
#undef NTDDI_VERSION
#define NTDDI_VERSION 0x05ffffff
#endif
- #endif /* __NT__ */
+ #ifdef _MSC_VER
+ /* Microsoft C.
+ *
+ * Version table from
+ * http://stackoverflow.com/questions/70013/how-to-detect-if-im-compiling-code-with-visual-studio-2008
+ * MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
+ * MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
+ * MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
+ * MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
+ * MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
+ * MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
+ * MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003)
+ * MSVC++ 7.0 _MSC_VER == 1300
+ * MSVC++ 6.0 _MSC_VER == 1200
+ * MSVC++ 5.0 _MSC_VER == 1100
+ */
+ #if _MSC_VER <= 1900
+ /* VS 2015 or earlier do not have all C99 keywords...
+ * cf https://msdn.microsoft.com/en-us/library/bw1hbe6y.aspx
+ */
+ #define inline __inline
+ #if _MSC_VER <= 1800
+ /* The isnan() macro was added in VS 2015.
+ */
+ #define isnan(X) _isnan(X)
+ #endif /* _MSC_VER <= 1800 */
+ #endif /* _MSC_VER <= 1900 */
+ #endif /* _MSC_VER */
- #ifdef __amigaos__
- /* Avoid getting definitions of struct in_addr from <unistd.h>... */
- #define __USE_NETINET_IN_H
- #endif
+ /* NB: Defaults to 64. */
+ #ifndef FD_SETSIZE
+ /*
+ * In reality: almost unlimited actually.
+ */
+ #define FD_SETSIZE 65536
+ #endif /* FD_SETSIZE */
-
+ #endif /* __NT__ */
+
/*
* Some structure forward declarations are needed.
*/
/* This is needed for linux */
#ifdef MALLOC_REPLACED
#define NO_FIX_MALLOC
#endif
- #ifndef STRUCT_PROGRAM_DECLARED
- #define STRUCT_PROGRAM_DECLARED
- struct program;
- #endif
-
+ struct array;
struct function;
- #ifndef STRUCT_SVALUE_DECLARED
- #define STRUCT_SVALUE_DECLARED
- struct svalue;
- #endif
- struct sockaddr;
+ struct mapping;
+ struct multiset;
struct object;
- struct array;
+ struct pike_string;
+ struct program;
+ struct sockaddr;
struct svalue;
-
- #ifndef STRUCT_TIMEVAL_DECLARED
- #define STRUCT_TIMEVAL_DECLARED
+
struct timeval;
- #endif
+
-
+
#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. */
/* Newer autoconf adds the PACKAGE_* defines for us, regardless
* whether we want them or not. If we're being included from a module
* they will clash, and so we need to ensure the one for the module
* survives, either they are defined already or get defined later.
* Tedious work.. */
#ifndef PIKE_CORE
pike.git/src/global.h:127:
#undef PACKAGE_STRING
#endif
#ifdef PACKAGE_BUGREPORT
#define ORIG_PACKAGE_BUGREPORT PACKAGE_BUGREPORT
#undef PACKAGE_BUGREPORT
#endif
#ifdef PACKAGE_URL
#define ORIG_PACKAGE_URL PACKAGE_URL
#undef PACKAGE_URL
#endif
- #endif
+ #endif /* PIKE_CORE */
#include "machine.h"
#ifndef PIKE_CORE
#undef PACKAGE_NAME
#ifdef ORIG_PACKAGE_NAME
#define PACKAGE_NAME ORIG_PACKAGE_NAME
#undef ORIG_PACKAGE_NAME
#endif
#undef PACKAGE_TARNAME
pike.git/src/global.h:162: Inside #if defined(ORIG_PACKAGE_BUGREPORT)
#undef PACKAGE_BUGREPORT
#ifdef ORIG_PACKAGE_BUGREPORT
#define PACKAGE_BUGREPORT ORIG_PACKAGE_BUGREPORT
#undef ORIG_PACKAGE_BUGREPORT
#endif
#undef PACKAGE_URL
#ifdef ORIG_PACKAGE_URL
#define PACKAGE_URL ORIG_PACKAGE_URL
#undef ORIG_PACKAGE_URL
#endif
- #endif
+ #endif /* PIKE_CORE */
- #endif
+ #endif /* CONFIGURE_TEST */
/* Some identifiers used as flags in the machine.h defines. */
#define PIKE_YES 1
#define PIKE_NO 2
#define PIKE_UNKNOWN 3
/* We want to use errno later */
#ifdef _SGI_SPROC_THREADS
/* Magic define of _SGI_MP_SOURCE above might redefine errno below */
#include <errno.h>
#if defined(HAVE_OSERROR) && !defined(errno)
#define errno (oserror())
#endif /* HAVE_OSERROR && !errno */
#endif /* _SGI_SPROC_THREADS */
- /* This macro is only provided for compatibility with
- * Windows PreRelease. Use ALIGNOF() instead!
- * (Needed for va_arg().)
- */
- #ifndef __alignof
- #define __alignof(X) ((size_t)&(((struct { char ignored_ ; X fooo_; } *)0)->fooo_))
- #endif /* __alignof */
-
+
#ifdef HAVE_FUNCTION_ATTRIBUTES
#define ATTRIBUTE(X) __attribute__ (X)
#else
#define ATTRIBUTE(X)
#endif
#ifdef HAVE_DECLSPEC
#define DECLSPEC(X) __declspec(X)
#else /* !HAVE_DECLSPEC */
#define DECLSPEC(X)
#endif /* HAVE_DECLSPEC */
-
+ #ifdef HAS___BUILTIN_EXPECT
+ # define UNLIKELY(X) __builtin_expect( (long)(X), 0 )
+ # define LIKELY(X) __builtin_expect( (long)(X), 1 )
+ #else
+ # define UNLIKELY(X) X
+ # define LIKELY(X) X
+ #endif
+
+ #ifdef HAS___BUILTIN_UNREACHABLE
+ # define UNREACHABLE(X) __builtin_unreachable()
+ #else
+ # define UNREACHABLE(X) X
+ #endif
+
+ #ifdef HAS___BUILTIN_ASSUME
+ # define STATIC_ASSUME(X) __builtin_assume(X)
+ #else
+ # ifdef HAS___BUILTIN_UNREACHABLE
+ # define STATIC_ASSUME(X) do { if (!(X)) UNREACHABLE(0); } while(0)
+ # else
+ # define STATIC_ASSUME(X)
+ # endif
+ #endif
+
+ #ifdef HAS___BUILTIN_CONSTANT_P
+ # define STATIC_IS_CONSTANT(X) __builtin_constant_p(X)
+ #else
+ # define STATIC_IS_CONSTANT(X) 0
+ #endif
+
#ifndef HAVE_WORKING_REALLOC_NULL
#define realloc(PTR, SZ) pike_realloc(PTR,SZ)
#endif
/* NOTE:
* PIKE_CONCAT doesn't get defined if there isn't any way to
* concatenate symbols
*/
#ifdef HAVE_ANSI_CONCAT
#define PIKE_CONCAT(X,Y) X##Y
pike.git/src/global.h:229:
#define TOSTR(X) #X
#define DEFINETOSTR(X) TOSTR(X)
/*
* 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
-
- #if defined(i386)
+ #if defined(i386) || defined(__powerpc__) || defined(__x86_64__) || (defined(__aarch64__) && defined(__ARM_FEATURE_UNALIGNED))
#ifndef HANDLES_UNALIGNED_MEMORY_ACCESS
#define HANDLES_UNALIGNED_MEMORY_ACCESS
#endif
- #endif
+ #endif /* i386 */
/* AIX requires this to be the first thing in the file. */
#if HAVE_ALLOCA_H
# include <alloca.h>
# ifdef __GNUC__
# ifdef alloca
# undef alloca
# endif
# define alloca __builtin_alloca
# endif
pike.git/src/global.h:268:
# ifdef _AIX
#pragma alloca
# else
# ifndef alloca /* predefined by HP cc +Olibcalls */
void *alloca();
# endif
# endif
# endif
#endif
- #ifdef __NT__
- /* We are running NT */
- #undef FD_SETSIZE
- #define FD_SETSIZE MAX_OPEN_FILEDESCRIPTORS
- #endif
-
+
#ifdef HAVE_DEVICES_TIMER_H
/* On AmigaOS, struct timeval is defined in a variety of places
and a variety of ways. Making sure <devices/timer.h> is included
first brings some amount of order to the chaos. */
#include <devices/timer.h>
#endif
#include <stdio.h>
#include <stdarg.h>
-
- #ifdef HAVE_STDLIB_H
+
#include <stdlib.h>
- #endif
-
- #ifdef HAVE_STDDEF_H
+
#include <stddef.h>
- #endif
+ #include <string.h>
+ #include <limits.h>
+ #include <float.h>
#ifdef HAVE_MALLOC_H
#if !defined(__FreeBSD__) && !defined(__OpenBSD__)
/* FreeBSD and OpenBSD has <malloc.h>, but it just contains a warning... */
#include <malloc.h>
#endif /* !__FreeBSD__ && !__OpenBSD */
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
- #ifdef HAVE_STRING_H
- #include <string.h>
- #endif
-
- #ifdef HAVE_LIMITS_H
- #include <limits.h>
- #endif
-
- #ifdef HAVE_SYS_TYPES_H
+
#include <sys/types.h>
- #endif
+
#ifdef HAVE_MEMORY_H
#include <memory.h>
#endif
#ifdef HAVE_WINDOWS_H
#include <windows.h>
#endif
- #include <float.h>
-
+
/* Get INT64, INT32, INT16, INT8, et al. */
#include "pike_int_types.h"
#define SIZE_T unsigned INT32
#define TYPE_T unsigned int
#define TYPE_FIELD unsigned INT16
#define B1_T char
pike.git/src/global.h:359:
#if SIZEOF_INT == 8
#define B8_T int
#elif SIZEOF_LONG == 8
#define B8_T long
#elif (SIZEOF_LONG_LONG - 0) == 8
#define B8_T long long
#elif (SIZEOF___INT64 - 0) == 8
#define B8_T __int64
#elif SIZEOF_CHAR_P == 8
#define B8_T char *
- #elif defined(B4_T)
- struct b8_t_s { B4_T x,y; };
- #define B8_T struct b8_t_s
+
#endif
- #if defined(B8_T)
- struct b16_t_s { B8_T x,y; };
- #define B16_T struct b16_t_s
+ #if (SIZEOF___INT128 - 0) == 16
+ #define B16_T __int128
#endif
/* INT_TYPE stuff */
#ifndef MAX_INT_TYPE
- # if defined (WITH_SHORT_INT)
+ # ifdef WITH_SHORT_INT
# define MAX_INT_TYPE SHRT_MAX
# define MIN_INT_TYPE SHRT_MIN
# define PRINTPIKEINT "h"
# define INT_ARG_TYPE int
- # elif defined (WITH_INT_INT)
+ # elif defined(WITH_INT_INT)
# define MAX_INT_TYPE INT_MAX
# define MIN_INT_TYPE INT_MIN
# define PRINTPIKEINT ""
- # elif defined (WITH_LONG_INT)
+ # 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)
+ # 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"
pike.git/src/global.h:419: Inside #if SIZEOF_INT_TYPE - 0 == 0
#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)
+ #ifdef WITH_LONG_DOUBLE_PRECISION_SVALUE
# 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"
- #elif defined (WITH_DOUBLE_PRECISION_SVALUE)
+ #elif defined(WITH_DOUBLE_PRECISION_SVALUE)
# 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
pike.git/src/global.h:477:
#if SIZEOF_FLOAT_TYPE - 0 == 0
#error Unsupported type chosen for pike floats.
#endif
/* Conceptually a char is a 32 bit signed value. Implementationwise
* that means that the shorter ones don't have space for the sign bit. */
typedef unsigned char p_wchar0;
typedef unsigned INT16 p_wchar1;
typedef signed INT32 p_wchar2;
+ enum size_shift {
+ eightbit=0,
+ sixteenbit=1,
+ thirtytwobit=2,
+ };
+
typedef struct p_wchar_p
{
- p_wchar0 *ptr;
- int shift;
+ void *ptr;
+ enum size_shift shift;
} PCHARP;
- /* Pointless in git. */
- #define RCSID(X)
+ #define WERR(...) fprintf(stderr,__VA_ARGS__)
#ifdef PIKE_DEBUG
#define DO_IF_DEBUG(X) X
#define DO_IF_DEBUG_ELSE(DEBUG, NO_DEBUG) DEBUG
-
+ #define DWERR(...) WERR(__VA_ARGS__)
-
+ /* Control assert() definition in <assert.h> */
#undef NDEBUG
/* Set of macros to simplify passing __FILE__ and __LINE__ to
* functions only in debug mode. */
#define DLOC __FILE__, __LINE__
#define COMMA_DLOC , __FILE__, __LINE__
#define DLOC_DECL const char *dloc_file, int dloc_line
#define COMMA_DLOC_DECL , const char *dloc_file, int dloc_line
#define DLOC_ARGS dloc_file, dloc_line
- #define DLOC_PF(PRE, SUF) PRE "%s:%d" SUF
+
#define DLOC_ARGS_OPT dloc_file, dloc_line
#define COMMA_DLOC_ARGS_OPT , dloc_file, dloc_line
-
+ #define USE_DLOC_ARGS() ((void)(DLOC_ARGS_OPT))
#define DLOC_ENABLED
#else /* !PIKE_DEBUG */
#define DO_IF_DEBUG(X)
#define DO_IF_DEBUG_ELSE(DEBUG, NO_DEBUG) NO_DEBUG
-
+ #define DWERR(...)
#define NDEBUG
#define DLOC
#define COMMA_DLOC
#define DLOC_DECL
#define COMMA_DLOC_DECL
#define DLOC_ARGS __FILE__, __LINE__
- #define DLOC_PF(PRE, SUF)
+
#define DLOC_ARGS_OPT
#define COMMA_DLOC_ARGS_OPT
-
+ #define USE_DLOC_ARGS()
#endif /* !PIKE_DEBUG */
#include <assert.h>
#if defined (PIKE_DEBUG) || defined (DO_PIKE_CLEANUP)
#define DO_IF_DEBUG_OR_CLEANUP(X) X
#else
#define DO_IF_DEBUG_OR_CLEANUP(X)
#endif
#ifdef INTERNAL_PROFILING
#define DO_IF_INTERNAL_PROFILING(X) X
#else
#define DO_IF_INTERNAL_PROFILING(X)
#endif
- #ifndef INLINE
- #if defined(__GNUC__) && !defined(PIKE_DEBUG) && !defined(lint)
- #define INLINE inline
- #else
- #define INLINE
- #endif
- #endif
-
+
/* Suppress compiler warnings for unused parameters if possible. The mangling of
argument name is required to catch when an unused argument later is used without
removing the annotation. */
- #ifndef UNUSED
+ #ifndef PIKE_UNUSED_ATTRIBUTE
# ifdef __GNUC__
- # define UNUSED(x) PIKE_CONCAT(x,_UNUSED) __attribute__((unused))
+ # define PIKE_UNUSED_ATTRIBUTE __attribute__((unused))
+ # if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ # define PIKE_WARN_UNUSED_RESULT_ATTRIBUTE __attribute__((warn_unused_result))
+ # else /* GCC < 3.4 */
+ # define PIKE_WARN_UNUSED_RESULT_ATTRIBUTE
+ # endif
# else
- # define UNUSED(x) PIKE_CONCAT(x,_UNUSED)
+ # define PIKE_UNUSED_ATTRIBUTE
+ # define PIKE_WARN_UNUSED_RESULT_ATTRIBUTE
# endif
#endif
- #ifndef DEBUGUSED
- # ifdef PIKE_DEBUG
- # define DEBUGUSED(x) x
- # else
- # define DEBUGUSED(x) UNUSED(x)
- # endif
+ #ifndef PIKE_UNUSED
+ # define PIKE_UNUSED(x) PIKE_CONCAT(x,_UNUSED) PIKE_UNUSED_ATTRIBUTE
#endif
-
+ #ifndef UNUSED
+ # define UNUSED(x) PIKE_UNUSED(x)
+ #endif
+ #ifdef PIKE_DEBUG
+ # define DEBUGUSED(x) x
+ #else
+ # define DEBUGUSED(x) PIKE_UNUSED(x)
+ #endif
+ #ifdef DEBUG_MALLOC
+ # define DMALLOCUSED(x) x
+ #else
+ # define DMALLOCUSED(x) PIKE_UNUSED(x)
+ #endif
-
+
/* PMOD_EXPORT exports a function / variable vfsh. */
#ifndef PMOD_EXPORT
# if defined (__NT__) && defined (USE_DLL)
# ifdef DYNAMIC_MODULE
# define PMOD_EXPORT __declspec(dllimport)
# else
/* A pmod export becomes an import in the dynamic module. This means
* that modules can't use PMOD_EXPORT for identifiers they export
* themselves, unless they are compiled statically. */
# define PMOD_EXPORT __declspec(dllexport)
pike.git/src/global.h:598:
#ifndef PMOD_PROTO
#define PMOD_PROTO
#endif
#ifndef DO_PIKE_CLEANUP
#if defined(PURIFY) || defined(__CHECKER__) || defined(DEBUG_MALLOC)
#define DO_PIKE_CLEANUP
#endif
#endif
- #ifdef PIKE_SECURITY
- #define DO_IF_SECURITY(X) X
- #else
- #define DO_IF_SECURITY(X)
- #endif
-
- /* Used by the AutoBuild system to mark known warnings. */
- #define DO_NOT_WARN(X) (X)
-
- /* 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 */
-
+
#ifndef HAVE_STRUCT_IOVEC
#define HAVE_STRUCT_IOVEC
struct iovec {
void *iov_base;
size_t iov_len;
};
#endif /* !HAVE_STRUCT_IOVEC */
-
+ #ifdef HAVE_NON_SCALAR_OFF64_T
+ /* Old Solaris uses unions instead of long long for 64bit values when __STDC__.
+ *
+ * Add some conversion functions for convenience.
+ *
+ * The types longlong_t and u_longlong_t are both from <sys/types.h>.
+ *
+ * Common types that are compatible with longlong_t:
+ * off64_t, blckcnt64_t, offset_t, diskaddr_t
+ *
+ * Common types that are compatible with u_longlong_t:
+ * ino64_t, fsblkcnt64_t, fsfilcnt64_t, u_offset_t, len_t
+ */
+ static inline INT64 PIKE_UNUSED_ATTRIBUTE pike_longlong_to_int64(longlong_t val)
+ {
+ union {
+ INT64 scalar;
+ longlong_t longlong;
+ } tmp;
+ tmp.longlong = val;
+ return tmp.scalar;
+ }
+ static inline unsigned INT64 PIKE_UNUSED_ATTRIBUTE pike_ulonglong_to_uint64(u_longlong_t val)
+ {
+ union {
+ unsigned INT64 uscalar;
+ u_longlong_t ulonglong;
+ } tmp;
+ tmp.ulonglong = val;
+ return tmp.uscalar;
+ }
+ static inline longlong_t PIKE_UNUSED_ATTRIBUTE pike_int64_to_longlong(INT64 val)
+ {
+ union {
+ INT64 scalar;
+ longlong_t longlong;
+ } tmp;
+ tmp.scalar = val;
+ return tmp.longlong;
+ }
+ static inline u_longlong_t PIKE_UNUSED_ATTRIBUTE pike_uint64_to_ulonglong(unsigned INT64 val)
+ {
+ union {
+ unsigned INT64 uscalar;
+ u_longlong_t ulonglong;
+ } tmp;
+ tmp.uscalar = val;
+ return tmp.ulonglong;
+ }
+ #else /* !HAVE_NON_SCALAR_OFF64_T */
+ #define pike_longlong_to_int64(VAL) ((INT64)(VAL))
+ #define pike_ulonglong_to_uint64(VAL) ((unsigned INT64)(VAL))
+ #define pike_int64_to_longlong(VAL) ((INT64)(VAL))
+ #define pike_uint64_to_ulonglong(VAL) ((unsigned INT64)(VAL))
+ #endif /* HAVE_NON_SCALAR_OFF64_T */
+
#include "port.h"
#include "dmalloc.h"
/* Either this include must go or the include of threads.h in
* pike_cpulib.h. Otherwise we get pesky include loops. */
/* #include "pike_cpulib.h" */
- #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));
+ void *malloc (int);
+ void *realloc (void *,int);
+ void free (void *);
+ void *calloc (int,int);
#endif
#ifdef GETPEERNAME_DECL_MISSING
- int getpeername PROT((int, struct sockaddr *, int *));
+ int getpeername (int, struct sockaddr *, int *);
#endif
#ifdef GETHOSTNAME_DECL_MISSING
- void gethostname PROT((char *,int));
+ void gethostname (char *,int);
#endif
#ifdef POPEN_DECL_MISSING
- FILE *popen PROT((char *,char *));
+ FILE *popen (char *,char *);
#endif
#ifdef GETENV_DECL_MISSING
- char *getenv PROT((char *));
+ char *getenv (char *);
#endif
- #ifdef USE_CRYPT_C
- char *crypt(const char *, const char *);
- #endif /* USE_CRYPT_C */
-
+
/* 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
/* Compatibility... */
#define USE_PIKE_TYPE 2
- #ifdef PIKE_RUN_UNLOCKED
- #define DO_IF_RUN_UNLOCKED(X) X
- #else
- #define DO_IF_RUN_UNLOCKED(X)
- #endif
-
+
/* Used in more than one place, better put it here */
-
- #if defined(PROFILING)
+ #ifdef PROFILING
#define DO_IF_PROFILING(X) X
#else
#define DO_IF_PROFILING(X)
#endif
/* #define PROFILING_DEBUG */
#ifdef PROFILING_DEBUG
- #define DO_IF_PROFILING_DEBUG(X) X
+ #define W_PROFILING_DEBUG(...) WERR(__VA_ARGS__)
#else /* !PROFILING_DEBUG */
- #define DO_IF_PROFILING_DEBUG(X)
+ #define W_PROFILING_DEBIG(...)
#endif /* PROFILING_DEBUG */
-
+ #ifdef HAVE_C99_STRUCT_LITERAL_EXPR
+ /* This macro is used for eg type-safe struct initializers. */
+ #define CAST_STRUCT_LITERAL(TYPE) (TYPE)
+ #else
+ /* Prior to C99 the literal was a special form only valid in
+ * initializers (ie not in general expressions).
+ */
+ #define CAST_STRUCT_LITERAL(TYPE)
#endif
-
+
+ #endif