#ifndef PORT_H #define PORT_H #include "machine.h" #ifdef HAVE_UNISTD_H #include <unistd.h> #endif /* p_int : an integer that has the same size as a pointer */ #if SIZEOF_INT == SIZEOF_P_INT typedef int p_int; typedef unsigned int p_uint; #else #if SIZEOF_LONG == SIZEOF_P_INT typedef long p_int; typedef unsigned long p_uint; #endif #if SIZEOF_LONG < SIZEOF_P_INT typedef long long p_int; typedef unsigned long long p_uint; #endif #endif /* ph_int : an integer that has half the size of a pointer */ #if SIZEOF_P_INT == SIZEOF_INT * 2 typedef int ph_int; typedef unsigned int ph_uint; #else #if SIZEOF_P_INT == 4 /* short is assumed to be always 2 bytes. */ typedef short ph_int; typedef unsigned short ph_uint; #endif #endif /* mp_int : an integer that has at least the size of a pointer */ #if SIZEOF_INT >= SIZEOF_P_INT typedef int mp_int; typedef unsigned int mp_uint; #else typedef p_int mp_int typedef p_unit mp_uint #endif /* int32 : an integer with 32 bits */ #if SIZEOF_INT == 4 typedef int int32; typedef unsigned int uint32; #else #if SIZEOF_LONG == 4 typedef long int32; typedef unsigned long uint32; #endif #endif #ifdef FREE_RETURNS_VOID #define FREE_RETURN_TYPE void #define FREE_RETURN return; #else #define FREE_RETURN_TYPE int #define FREE_RETURN return 1; #endif #define EXTRACT_UCHAR(p) (*(unsigned char *)(p)) #if defined(atarist) || defined(AMIGA) #ifndef NO_IP_DEMON #define NO_IP_DEMON #endif #endif #if defined(M_UNIX) || defined(linux) || defined(solaris) || \ defined(_POSIX_VERSION) #ifndef POSIX #define POSIX #endif #endif #ifdef HAVE_GETRUSAGE #if !defined(solaris) #define RUSAGE_TIME(t) ( (t).tv_sec * 1000 + (t).tv_usec / 1000 ) #else #define RUSAGE_TIME(t) ( (t).tv_sec * 1000 + (t).tv_nsec / 1000000 ) #endif #else /* !HAVE_GETRUSAGE */ #undef RUSAGE_RESTRICTED #define RUSAGE_RESTRICTED #ifdef POSIX #define RUSAGE_SELF 0 struct rusage { long ru_utime, ru_stime; }; #define RUSAGE_TIME(t) ( (t) * 1000 / sysconf(_SC_CLK_TCK) ) #endif /* POSIX */ #endif /* HAVE_GETRUSAGE */ #ifndef HAVE_MEMCPY /* The following 'implementation' is suitable for throwing away a value, but not to using it; the cast to return int is likely to show a warning if the value is used by accident. */ #define memcpy(b, a, s) (*((int (*)())(&bcopy)))(a, b, s) #endif #ifndef HAVE_BZERO #define bzero(str, i) memset(str, '\0', i) #endif #if !defined(HAVE_CRYPT) && defined(HAVE__CRYPT) #define crypt(pass, salt) _crypt(pass, salt) #endif #ifndef HAVE_STRCHR #define strchr index #endif #ifndef HAVE_STRRCHR #define strchr rindex #endif #if defined(AMIGA) #include "hosts/amiga/ixfile.h" #else #define ixstat stat #define ixopen ((int(*)PROT((char *, int)))open) #define ixopen3 open #endif #endif /* PORT_H */