compat.h revision 181834
1181834Sroberto/* -*- Mode: C -*- */ 2181834Sroberto 3181834Sroberto/* --- fake the preprocessor into handlng portability */ 4181834Sroberto/* 5181834Sroberto * Time-stamp: "2007-02-03 17:41:06 bkorb" 6181834Sroberto * 7181834Sroberto * Author: Gary V Vaughan <gvaughan@oranda.demon.co.uk> 8181834Sroberto * Created: Mon Jun 30 15:54:46 1997 9181834Sroberto * 10181834Sroberto * $Id: compat.h,v 4.16 2007/04/27 01:10:47 bkorb Exp $ 11181834Sroberto */ 12181834Sroberto#ifndef COMPAT_H_GUARD 13181834Sroberto#define COMPAT_H_GUARD 1 14181834Sroberto 15181834Sroberto#if defined(HAVE_CONFIG_H) 16181834Sroberto# include <config.h> 17181834Sroberto 18181834Sroberto#elif defined(_WIN32) && !defined(__CYGWIN__) 19181834Sroberto# include "windows-config.h" 20181834Sroberto 21181834Sroberto#else 22181834Sroberto# error "compat.h" requires "config.h" 23181834Sroberto choke me. 24181834Sroberto#endif 25181834Sroberto 26181834Sroberto 27181834Sroberto#ifndef HAVE_STRSIGNAL 28181834Sroberto char * strsignal( int signo ); 29181834Sroberto#endif 30181834Sroberto 31181834Sroberto#define _GNU_SOURCE 1 /* for strsignal in GNU's libc */ 32181834Sroberto#define __USE_GNU 1 /* exact same thing as above */ 33181834Sroberto#define __EXTENSIONS__ 1 /* and another way to call for it */ 34181834Sroberto 35181834Sroberto/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 36181834Sroberto * 37181834Sroberto * SYSTEM HEADERS: 38181834Sroberto */ 39181834Sroberto#include <sys/types.h> 40181834Sroberto#ifdef HAVE_SYS_MMAN_H 41181834Sroberto# include <sys/mman.h> 42181834Sroberto#endif 43181834Sroberto#include <sys/param.h> 44181834Sroberto#if HAVE_SYS_PROCSET_H 45181834Sroberto# include <sys/procset.h> 46181834Sroberto#endif 47181834Sroberto#include <sys/stat.h> 48181834Sroberto#include <sys/wait.h> 49181834Sroberto 50181834Sroberto#if defined( HAVE_SOLARIS_SYSINFO ) 51181834Sroberto# include <sys/systeminfo.h> 52181834Sroberto#elif defined( HAVE_UNAME_SYSCALL ) 53181834Sroberto# include <sys/utsname.h> 54181834Sroberto#endif 55181834Sroberto 56181834Sroberto#ifdef DAEMON_ENABLED 57181834Sroberto# if HAVE_SYS_STROPTS_H 58181834Sroberto# include <sys/stropts.h> 59181834Sroberto# endif 60181834Sroberto 61181834Sroberto# if HAVE_SYS_SOCKET_H 62181834Sroberto# include <sys/socket.h> 63181834Sroberto# endif 64181834Sroberto 65181834Sroberto# if ! defined(HAVE_SYS_POLL_H) && ! defined(HAVE_SYS_SELECT_H) 66181834Sroberto# error This system cannot support daemon processing 67181834Sroberto Choke Me. 68181834Sroberto# endif 69181834Sroberto 70181834Sroberto# if HAVE_SYS_POLL_H 71181834Sroberto# include <sys/poll.h> 72181834Sroberto# endif 73181834Sroberto 74181834Sroberto# if HAVE_SYS_SELECT_H 75181834Sroberto# include <sys/select.h> 76181834Sroberto# endif 77181834Sroberto 78181834Sroberto# if HAVE_NETINET_IN_H 79181834Sroberto# include <netinet/in.h> 80181834Sroberto# endif 81181834Sroberto 82181834Sroberto# if HAVE_SYS_UN_H 83181834Sroberto# include <sys/un.h> 84181834Sroberto# endif 85181834Sroberto#endif 86181834Sroberto 87181834Sroberto/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 88181834Sroberto * 89181834Sroberto * USER HEADERS: 90181834Sroberto */ 91181834Sroberto#include <stdio.h> 92181834Sroberto#include <assert.h> 93181834Sroberto#include <ctype.h> 94181834Sroberto 95181834Sroberto/* 96181834Sroberto * Directory opening stuff: 97181834Sroberto */ 98181834Sroberto# if defined (_POSIX_SOURCE) 99181834Sroberto/* Posix does not require that the d_ino field be present, and some 100181834Sroberto systems do not provide it. */ 101181834Sroberto# define REAL_DIR_ENTRY(dp) 1 102181834Sroberto# else /* !_POSIX_SOURCE */ 103181834Sroberto# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) 104181834Sroberto# endif /* !_POSIX_SOURCE */ 105181834Sroberto 106181834Sroberto# if defined (HAVE_DIRENT_H) 107181834Sroberto# include <dirent.h> 108181834Sroberto# define D_NAMLEN(dirent) strlen((dirent)->d_name) 109181834Sroberto# else /* !HAVE_DIRENT_H */ 110181834Sroberto# define dirent direct 111181834Sroberto# define D_NAMLEN(dirent) (dirent)->d_namlen 112181834Sroberto# if defined (HAVE_SYS_NDIR_H) 113181834Sroberto# include <sys/ndir.h> 114181834Sroberto# endif /* HAVE_SYS_NDIR_H */ 115181834Sroberto# if defined (HAVE_SYS_DIR_H) 116181834Sroberto# include <sys/dir.h> 117181834Sroberto# endif /* HAVE_SYS_DIR_H */ 118181834Sroberto# if defined (HAVE_NDIR_H) 119181834Sroberto# include <ndir.h> 120181834Sroberto# endif /* HAVE_NDIR_H */ 121181834Sroberto# endif /* !HAVE_DIRENT_H */ 122181834Sroberto 123181834Sroberto#include <errno.h> 124181834Sroberto#ifdef HAVE_FCNTL_H 125181834Sroberto# include <fcntl.h> 126181834Sroberto#endif 127181834Sroberto#ifndef O_NONBLOCK 128181834Sroberto# define O_NONBLOCK FNDELAY 129181834Sroberto#endif 130181834Sroberto 131181834Sroberto#if defined(HAVE_LIBGEN) && defined(HAVE_LIBGEN_H) 132181834Sroberto# include <libgen.h> 133181834Sroberto#endif 134181834Sroberto 135181834Sroberto#if defined(HAVE_LIMITS_H) /* this is also in options.h */ 136181834Sroberto# include <limits.h> 137181834Sroberto#elif defined(HAVE_SYS_LIMITS_H) 138181834Sroberto# include <sys/limits.h> 139181834Sroberto#endif /* HAVE_LIMITS/SYS_LIMITS_H */ 140181834Sroberto 141181834Sroberto#include <memory.h> 142181834Sroberto#include <setjmp.h> 143181834Sroberto#include <signal.h> 144181834Sroberto 145181834Sroberto#if defined( HAVE_STDINT_H ) 146181834Sroberto# include <stdint.h> 147181834Sroberto#elif defined( HAVE_INTTYPES_H ) 148181834Sroberto# include <inttypes.h> 149181834Sroberto#endif 150181834Sroberto 151181834Sroberto#include <stdlib.h> 152181834Sroberto#include <string.h> 153181834Sroberto 154181834Sroberto#include <time.h> 155181834Sroberto 156181834Sroberto#ifdef HAVE_UTIME_H 157181834Sroberto# include <utime.h> 158181834Sroberto#endif 159181834Sroberto 160181834Sroberto#ifdef HAVE_UNISTD_H 161181834Sroberto# include <unistd.h> 162181834Sroberto#endif 163181834Sroberto 164181834Sroberto/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 165181834Sroberto * 166181834Sroberto * FIXUPS and CONVIENCE STUFF: 167181834Sroberto */ 168181834Sroberto#ifdef __cplusplus 169181834Sroberto# define EXTERN extern "C" 170181834Sroberto#else 171181834Sroberto# define EXTERN extern 172181834Sroberto#endif 173181834Sroberto 174181834Sroberto/* some systems #def errno! and others do not declare it!! */ 175181834Sroberto#ifndef errno 176181834Sroberto extern int errno; 177181834Sroberto#endif 178181834Sroberto 179181834Sroberto/* Some machines forget this! */ 180181834Sroberto 181181834Sroberto# ifndef EXIT_FAILURE 182181834Sroberto# define EXIT_SUCCESS 0 183181834Sroberto# define EXIT_FAILURE 1 184181834Sroberto# endif 185181834Sroberto 186181834Sroberto#ifndef NUL 187181834Sroberto# define NUL '\0' 188181834Sroberto#endif 189181834Sroberto 190181834Sroberto#ifndef NULL 191181834Sroberto# define NULL 0 192181834Sroberto#endif 193181834Sroberto 194181834Sroberto#if !defined (MAXPATHLEN) && defined (HAVE_SYS_PARAM_H) 195181834Sroberto# include <sys/param.h> 196181834Sroberto#endif /* !MAXPATHLEN && HAVE_SYS_PARAM_H */ 197181834Sroberto 198181834Sroberto#if !defined (MAXPATHLEN) && defined (PATH_MAX) 199181834Sroberto# define MAXPATHLEN PATH_MAX 200181834Sroberto#endif /* !MAXPATHLEN && PATH_MAX */ 201181834Sroberto 202181834Sroberto#if !defined (MAXPATHLEN) && defined(_MAX_PATH) 203181834Sroberto# define PATH_MAX _MAX_PATH 204181834Sroberto# define MAXPATHLEN _MAX_PATH 205181834Sroberto#endif 206181834Sroberto 207181834Sroberto#if !defined (MAXPATHLEN) 208181834Sroberto# define MAXPATHLEN ((size_t)4096) 209181834Sroberto#endif /* MAXPATHLEN */ 210181834Sroberto 211181834Sroberto#define AG_PATH_MAX ((size_t)MAXPATHLEN) 212181834Sroberto 213181834Sroberto#ifndef LONG_MAX 214181834Sroberto# define LONG_MAX ~(1L << (8*sizeof(long) -1)) 215181834Sroberto# define INT_MAX ~(1 << (8*sizeof(int) -1)) 216181834Sroberto#endif 217181834Sroberto 218181834Sroberto#ifndef ULONG_MAX 219181834Sroberto# define ULONG_MAX ~(OUL) 220181834Sroberto# define UINT_MAX ~(OU) 221181834Sroberto#endif 222181834Sroberto 223181834Sroberto#ifndef SHORT_MAX 224181834Sroberto# define SHORT_MAX ~(1 << (8*sizeof(short) -1)) 225181834Sroberto#else 226181834Sroberto# define USHORT_MAX ~(OUS) 227181834Sroberto#endif 228181834Sroberto 229181834Sroberto#ifndef HAVE_INT8_T 230181834Sroberto typedef signed char int8_t; 231181834Sroberto#endif 232181834Sroberto#ifndef HAVE_UINT8_T 233181834Sroberto typedef unsigned char uint8_t; 234181834Sroberto#endif 235181834Sroberto#ifndef HAVE_INT16_T 236181834Sroberto typedef signed short int16_t; 237181834Sroberto#endif 238181834Sroberto#ifndef HAVE_UINT16_T 239181834Sroberto typedef unsigned short uint16_t; 240181834Sroberto#endif 241181834Sroberto#ifndef HAVE_UINT_T 242181834Sroberto typedef unsigned int uint_t; 243181834Sroberto#endif 244181834Sroberto 245181834Sroberto#ifndef HAVE_INT32_T 246181834Sroberto# if SIZEOF_INT == 4 247181834Sroberto typedef signed int int32_t; 248181834Sroberto# elif SIZEOF_LONG == 4 249181834Sroberto typedef signed long int32_t; 250181834Sroberto# endif 251181834Sroberto#endif 252181834Sroberto 253181834Sroberto#ifndef HAVE_UINT32_T 254181834Sroberto# if SIZEOF_INT == 4 255181834Sroberto typedef unsigned int uint32_t; 256181834Sroberto# elif SIZEOF_LONG == 4 257181834Sroberto typedef unsigned long uint32_t; 258181834Sroberto# else 259181834Sroberto# error Cannot create a uint32_t type. 260181834Sroberto Choke Me. 261181834Sroberto# endif 262181834Sroberto#endif 263181834Sroberto 264181834Sroberto#ifndef HAVE_INTPTR_T 265181834Sroberto typedef signed long intptr_t; 266181834Sroberto#endif 267181834Sroberto#ifndef HAVE_UINTPTR_T 268181834Sroberto typedef unsigned long uintptr_t; 269181834Sroberto#endif 270181834Sroberto 271181834Sroberto/* redefine these for BSD style string libraries */ 272181834Sroberto#ifndef HAVE_STRCHR 273181834Sroberto# define strchr index 274181834Sroberto# define strrchr rindex 275181834Sroberto#endif 276181834Sroberto 277181834Sroberto#ifdef USE_FOPEN_BINARY 278181834Sroberto# ifndef FOPEN_BINARY_FLAG 279181834Sroberto# define FOPEN_BINARY_FLAG "b" 280181834Sroberto# endif 281181834Sroberto# ifndef FOPEN_TEXT_FLAG 282181834Sroberto# define FOPEN_TEXT_FLAG "t" 283181834Sroberto# endif 284181834Sroberto#else 285181834Sroberto# ifndef FOPEN_BINARY_FLAG 286181834Sroberto# define FOPEN_BINARY_FLAG 287181834Sroberto# endif 288181834Sroberto# ifndef FOPEN_TEXT_FLAG 289181834Sroberto# define FOPEN_TEXT_FLAG 290181834Sroberto# endif 291181834Sroberto#endif 292181834Sroberto 293181834Sroberto#ifndef STR 294181834Sroberto# define _STR(s) #s 295181834Sroberto# define STR(s) _STR(s) 296181834Sroberto#endif 297181834Sroberto 298181834Sroberto/* ##### Pointer sized word ##### */ 299181834Sroberto 300181834Sroberto/* FIXME: the MAX stuff in here is broken! */ 301181834Sroberto#if SIZEOF_CHARP > SIZEOF_INT 302181834Sroberto typedef long t_word; 303181834Sroberto #define WORD_MAX LONG_MAX 304181834Sroberto #define WORD_MIN LONG_MIN 305181834Sroberto#else /* SIZEOF_CHARP <= SIZEOF_INT */ 306181834Sroberto typedef int t_word; 307181834Sroberto #define WORD_MAX INT_MAX 308181834Sroberto #define WORD_MIN INT_MIN 309181834Sroberto#endif 310181834Sroberto 311181834Sroberto#endif /* COMPAT_H_GUARD */ 312181834Sroberto 313181834Sroberto/* 314181834Sroberto * Local Variables: 315181834Sroberto * mode: C 316181834Sroberto * c-file-style: "stroustrup" 317181834Sroberto * indent-tabs-mode: nil 318181834Sroberto * End: 319181834Sroberto * end of compat/compat.h */ 320