1/* $NetBSD: compat.h,v 1.5 2020/05/25 20:47:35 christos Exp $ */ 2 3/* -*- Mode: C -*- 4 * 5 * compat.h is free software. 6 * This file is part of AutoGen and AutoOpts. 7 * 8 * AutoGen Copyright (C) 1992-2015 by Bruce Korb - all rights reserved 9 * 10 * AutoOpts is available under any one of two licenses. The license 11 * in use must be one of these two and the choice is under the control 12 * of the user of the license. 13 * 14 * The GNU Lesser General Public License, version 3 or later 15 * See the files "COPYING.lgplv3" and "COPYING.gplv3" 16 * 17 * The Modified Berkeley Software Distribution License 18 * See the file "COPYING.mbsd" 19 * 20 * These files have the following sha256 sums: 21 * 22 * 8584710e9b04216a394078dc156b781d0b47e1729104d666658aecef8ee32e95 COPYING.gplv3 23 * 4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b COPYING.lgplv3 24 * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd 25 */ 26 27/** 28 * \file compat.h 29 * fake the preprocessor into handlng stuff portability 30 */ 31#ifndef COMPAT_H_GUARD 32#define COMPAT_H_GUARD 1 33 34#if defined(HAVE_CONFIG_H) 35# include <config.h> 36 37#elif defined(_WIN32) && !defined(__CYGWIN__) 38# include "windows-config.h" 39 40#else 41# error "compat.h" requires "config.h" 42 choke me. 43#endif 44 45 46#ifndef HAVE_STRSIGNAL 47# ifndef HAVE_RAW_DECL_STRSIGNAL 48 char * strsignal(int signo); 49# endif 50#endif 51 52#define _GNU_SOURCE 1 /* for strsignal in GNU's libc */ 53#define __USE_GNU 1 /* exact same thing as above */ 54#define __EXTENSIONS__ 1 /* and another way to call for it */ 55 56/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 57 * 58 * SYSTEM HEADERS: 59 */ 60#include <sys/types.h> 61#ifdef HAVE_SYS_MMAN_H 62# include <sys/mman.h> 63#endif 64#include <sys/param.h> 65#if HAVE_SYS_PROCSET_H 66# include <sys/procset.h> 67#endif 68#include <sys/stat.h> 69#ifdef HAVE_SYS_WAIT_H 70# include <sys/wait.h> 71#endif 72 73#if defined( HAVE_SOLARIS_SYSINFO ) 74# include <sys/systeminfo.h> 75#elif defined( HAVE_UNAME_SYSCALL ) 76# include <sys/utsname.h> 77#endif 78 79#ifdef DAEMON_ENABLED 80# if HAVE_SYS_STROPTS_H 81# include <sys/stropts.h> 82# endif 83 84# if HAVE_SYS_SOCKET_H 85# include <sys/socket.h> 86# endif 87 88# if ! defined(HAVE_SYS_POLL_H) && ! defined(HAVE_SYS_SELECT_H) 89# error This system cannot support daemon processing 90 Choke Me. 91# endif 92 93# if HAVE_SYS_POLL_H 94# include <sys/poll.h> 95# endif 96 97# if HAVE_SYS_SELECT_H 98# include <sys/select.h> 99# endif 100 101# if HAVE_NETINET_IN_H 102# include <netinet/in.h> 103# endif 104 105# if HAVE_SYS_UN_H 106# include <sys/un.h> 107# endif 108#endif 109 110/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 111 * 112 * USER HEADERS: 113 */ 114#include <stdio.h> 115#include <assert.h> 116#include <ctype.h> 117 118/* 119 * Directory opening stuff: 120 */ 121# if defined (_POSIX_SOURCE) 122/* Posix does not require that the d_ino field be present, and some 123 systems do not provide it. */ 124# define REAL_DIR_ENTRY(dp) 1 125# else /* !_POSIX_SOURCE */ 126# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) 127# endif /* !_POSIX_SOURCE */ 128 129# if defined (HAVE_DIRENT_H) 130# include <dirent.h> 131# define D_NAMLEN(dirent) strlen((dirent)->d_name) 132# else /* !HAVE_DIRENT_H */ 133# define dirent direct 134# define D_NAMLEN(dirent) (dirent)->d_namlen 135# if defined (HAVE_SYS_NDIR_H) 136# include <sys/ndir.h> 137# endif /* HAVE_SYS_NDIR_H */ 138# if defined (HAVE_SYS_DIR_H) 139# include <sys/dir.h> 140# endif /* HAVE_SYS_DIR_H */ 141# if defined (HAVE_NDIR_H) 142# include <ndir.h> 143# endif /* HAVE_NDIR_H */ 144# endif /* !HAVE_DIRENT_H */ 145 146#include <errno.h> 147#ifdef HAVE_FCNTL_H 148# include <fcntl.h> 149#endif 150#ifndef O_NONBLOCK 151# define O_NONBLOCK FNDELAY 152#endif 153 154#if defined(HAVE_LIBGEN) && defined(HAVE_LIBGEN_H) 155# include <libgen.h> 156#endif 157 158#if defined(HAVE_LIMITS_H) /* this is also in options.h */ 159# include <limits.h> 160#elif defined(HAVE_SYS_LIMITS_H) 161# include <sys/limits.h> 162#endif /* HAVE_LIMITS/SYS_LIMITS_H */ 163 164#include <memory.h> 165#include <setjmp.h> 166#include <signal.h> 167 168#if defined(HAVE_STDINT_H) 169# include <stdint.h> 170 171#elif defined(HAVE_INTTYPES_H) 172# include <inttypes.h> 173#endif 174 175#include <stdlib.h> 176#include <string.h> 177#include <time.h> 178 179#ifdef HAVE_UTIME_H 180# include <utime.h> 181#endif 182 183#ifdef HAVE_UNISTD_H 184# include <unistd.h> 185#endif 186 187#ifdef HAVE_STDBOOL_H 188# include <stdbool.h> 189#else 190 typedef enum { false = 0, true = 1 } _Bool; 191# define bool _Bool 192 193 /* The other macros must be usable in preprocessor directives. */ 194# define false 0 195# define true 1 196#endif 197 198/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 199 * 200 * FIXUPS and CONVIENCE STUFF: 201 */ 202#ifdef __cplusplus 203# define EXTERN extern "C" 204#else 205# define EXTERN extern 206#endif 207 208/* some systems #def errno! and others do not declare it!! */ 209#ifndef errno 210 extern int errno; 211#endif 212 213/* Some machines forget this! */ 214 215# ifndef EXIT_FAILURE 216# define EXIT_SUCCESS 0 217# define EXIT_FAILURE 1 218# endif 219 220#ifndef NUL 221# define NUL '\0' 222#endif 223 224#ifndef NULL 225# define NULL 0 226#endif 227 228#if !defined (MAXPATHLEN) && defined (HAVE_SYS_PARAM_H) 229# include <sys/param.h> 230#endif /* !MAXPATHLEN && HAVE_SYS_PARAM_H */ 231 232#if !defined (MAXPATHLEN) && defined (PATH_MAX) 233# define MAXPATHLEN PATH_MAX 234#endif /* !MAXPATHLEN && PATH_MAX */ 235 236#if !defined (MAXPATHLEN) && defined(_MAX_PATH) 237# define PATH_MAX _MAX_PATH 238# define MAXPATHLEN _MAX_PATH 239#endif 240 241#if !defined (MAXPATHLEN) 242# define MAXPATHLEN 4096 243#endif /* MAXPATHLEN */ 244 245#define AG_PATH_MAX ((size_t)MAXPATHLEN) 246 247#ifndef LONG_MAX 248# define LONG_MAX ~(1L << (8*sizeof(long) -1)) 249# define INT_MAX ~(1 << (8*sizeof(int) -1)) 250#endif 251 252#ifndef ULONG_MAX 253# define ULONG_MAX ~(OUL) 254# define UINT_MAX ~(OU) 255#endif 256 257#ifndef SHORT_MAX 258# define SHORT_MAX ~(1 << (8*sizeof(short) - 1)) 259#else 260# define USHORT_MAX ~(OUS) 261#endif 262 263#ifndef HAVE_INT8_T 264 typedef signed char int8_t; 265# define HAVE_INT8_T 1 266#endif 267#ifndef HAVE_UINT8_T 268 typedef unsigned char uint8_t; 269# define HAVE_UINT8_T 1 270#endif 271#ifndef HAVE_INT16_T 272 typedef signed short int16_t; 273# define HAVE_INT16_T 1 274#endif 275#ifndef HAVE_UINT16_T 276 typedef unsigned short uint16_t; 277# define HAVE_UINT16_T 1 278#endif 279 280#ifndef HAVE_INT32_T 281# if SIZEOF_INT == 4 282 typedef signed int int32_t; 283# elif SIZEOF_LONG == 4 284 typedef signed long int32_t; 285# endif 286# define HAVE_INT32_T 1 287#endif 288 289#ifndef HAVE_UINT32_T 290# if SIZEOF_INT == 4 291 typedef unsigned int uint32_t; 292# elif SIZEOF_LONG == 4 293 typedef unsigned long uint32_t; 294# else 295# error Cannot create a uint32_t type. 296 Choke Me. 297# endif 298# define HAVE_UINT32_T 1 299#endif 300 301#ifndef HAVE_INTPTR_T 302# if SIZEOF_CHARP == SIZEOF_LONG 303 typedef signed long intptr_t; 304# else 305 typedef signed int intptr_t; 306# endif 307# define HAVE_INTPTR_T 1 308#endif 309 310#ifndef HAVE_UINTPTR_T 311# if SIZEOF_CHARP == SIZEOF_LONG 312 typedef unsigned long intptr_t; 313# else 314 typedef unsigned int intptr_t; 315# endif 316# define HAVE_INTPTR_T 1 317#endif 318 319#ifndef HAVE_UINT_T 320 typedef unsigned int uint_t; 321# define HAVE_UINT_T 1 322#endif 323 324#ifndef HAVE_SIZE_T 325 typedef unsigned int size_t; 326# define HAVE_SIZE_T 1 327#endif 328#ifndef HAVE_WINT_T 329 typedef unsigned int wint_t; 330# define HAVE_WINT_T 1 331#endif 332#ifndef HAVE_PID_T 333 typedef signed int pid_t; 334# define HAVE_PID_T 1 335#endif 336 337/* redefine these for BSD style string libraries */ 338#ifndef HAVE_STRCHR 339# define strchr index 340# define strrchr rindex 341#endif 342 343#ifdef USE_FOPEN_BINARY 344# ifndef FOPEN_BINARY_FLAG 345# define FOPEN_BINARY_FLAG "b" 346# endif 347# ifndef FOPEN_TEXT_FLAG 348# define FOPEN_TEXT_FLAG "t" 349# endif 350#else 351# ifndef FOPEN_BINARY_FLAG 352# define FOPEN_BINARY_FLAG 353# endif 354# ifndef FOPEN_TEXT_FLAG 355# define FOPEN_TEXT_FLAG 356# endif 357#endif 358 359#ifndef STR 360# define _STR(s) #s 361# define STR(s) _STR(s) 362#endif 363 364/* ##### Pointer sized word ##### */ 365 366/* FIXME: the MAX stuff in here is broken! */ 367#if SIZEOF_CHARP > SIZEOF_INT 368 typedef long t_word; 369 #define WORD_MAX LONG_MAX 370 #define WORD_MIN LONG_MIN 371#else /* SIZEOF_CHARP <= SIZEOF_INT */ 372 typedef int t_word; 373 #define WORD_MAX INT_MAX 374 #define WORD_MIN INT_MIN 375#endif 376 377#endif /* COMPAT_H_GUARD */ 378 379/* 380 * Local Variables: 381 * mode: C 382 * c-file-style: "stroustrup" 383 * indent-tabs-mode: nil 384 * End: 385 * end of compat/compat.h */ 386