/* This file is part of GNUnet. Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2012 GNUnet e.V. GNUnet is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . SPDX-License-Identifier: AGPL3.0-or-later */ /** * @author Nils Durner * @author Christian Grothoff * * @file * Plaform specific includes and defines. * * This file should never be included by installed * header files (those starting with "gnunet_"). */ #ifndef PLATFORM_H #define PLATFORM_H #ifndef HAVE_USED_CONFIG_H #define HAVE_USED_CONFIG_H #if HAVE_CONFIG_H #include "gnunet_config.h" #endif #endif #ifdef WINDOWS #define BREAKPOINT asm("int $3;"); #define GNUNET_SIGCHLD 17 #else #define BREAKPOINT #define GNUNET_SIGCHLD SIGCHLD #endif #ifdef HAVE_SYS_TYPES_H #include #endif /** * These may be expensive, but good for debugging... */ #define ALLOW_EXTRA_CHECKS GNUNET_YES /** * For strptime (glibc2 needs this). */ #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE 499 #endif #ifndef _REENTRANT #define _REENTRANT #endif /* configuration options */ #define VERBOSE_STATS 0 #ifdef CYGWIN #include #endif #ifdef _MSC_VER #ifndef FD_SETSIZE #define FD_SETSIZE 1024 #endif #include #include #else #ifndef MINGW #include #include #include #if HAVE_NETINET_IN_H #include #endif #if HAVE_NETINET_IN_SYSTM_H #include #endif #if HAVE_NETINET_IP_H #include /* superset of previous */ #endif #include #include #include #include #include #include #else #include "winproc.h" #endif #endif #include #include #include #include #include #include #include #include #include #ifdef WINDOWS #include /* for alloca(), on other OSes it's in stdlib.h */ #endif #ifdef HAVE_MALLOC_H #include /* for mallinfo on GNU */ #endif #ifndef _MSC_VER #include /* KLB_FIX */ #endif #include #include #ifndef _MSC_VER #include /* KLB_FIX */ #endif #include #include #if HAVE_SYS_PARAM_H #include #endif #if TIME_WITH_SYS_TIME #include #include #else #if HAVE_SYS_TIME_H #include #else #include #endif #endif #ifdef SOMEBSD #include #endif #ifdef FREEBSD #include #endif #ifdef DARWIN #include #include #include #endif #if defined(LINUX) || defined(GNU) #include #endif #ifdef SOLARIS #include #include #include #include #endif #if HAVE_UCRED_H #include #endif #if HAVE_SYS_UCRED_H #include #endif #ifdef CYGWIN #include #include #endif #if HAVE_IFADDRS_H #include #endif #include #include #if HAVE_VFORK_H #include #endif #include #if HAVE_SYS_RESOURCE_H #include #endif #if HAVE_ENDIAN_H #include #endif #if HAVE_SYS_ENDIAN_H #include #endif #include "plibc.h" #include "compat.h" #include #ifndef FRAMEWORK_BUILD #include "gettext.h" /** * GNU gettext support macro. */ #define _(String) dgettext("gnunet",String) #define LIBEXTRACTOR_GETTEXT_DOMAIN "libextractor" #else #include "libintlemu.h" #define _(String) dgettext("org.gnunet.gnunet",String) #define LIBEXTRACTOR_GETTEXT_DOMAIN "org.gnunet.libextractor" #endif #ifdef CYGWIN #define SIOCGIFCONF _IOW('s', 100, struct ifconf) /* get if list */ #define SIOCGIFFLAGS _IOW('s', 101, struct ifreq) /* Get if flags */ #define SIOCGIFADDR _IOW('s', 102, struct ifreq) /* Get if addr */ #endif #ifndef MINGW #include #endif #ifdef FREEBSD #define __BYTE_ORDER BYTE_ORDER #define __BIG_ENDIAN BIG_ENDIAN #endif #ifdef DARWIN #define __BYTE_ORDER BYTE_ORDER #define __BIG_ENDIAN BIG_ENDIAN /* not available on darwin, override configure */ #undef HAVE_STAT64 #undef HAVE_MREMAP #endif #if !HAVE_ATOLL long long atoll (const char *nptr); #endif #if ENABLE_NLS #include "langinfo.h" #endif #ifndef SIZE_MAX #define SIZE_MAX ((size_t)(-1)) #endif #ifndef O_LARGEFILE #define O_LARGEFILE 0 #endif /** * AI_NUMERICSERV not defined in windows. Then we just do without. */ #ifndef AI_NUMERICSERV #define AI_NUMERICSERV 0 #endif #if defined(__sparc__) #define MAKE_UNALIGNED(val) ({ __typeof__((val)) __tmp; memmove(&__tmp, &(val), sizeof((val))); __tmp; }) #else #define MAKE_UNALIGNED(val) val #endif #if WINDOWS #define FDTYPE HANDLE #define SOCKTYPE SOCKET #else #define FDTYPE int #define SOCKTYPE int #endif /** * The termination signal */ #define GNUNET_TERM_SIG SIGTERM #ifndef PATH_MAX /** * Assumed maximum path length. */ #define PATH_MAX 4096 #endif #endif