/* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ /* acconfig.h - autoheader configuration input */ /* * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Office of Technology Transfer * Carnegie Mellon University * 5000 Forbes Avenue * Pittsburgh, PA 15213-3890 * (412) 268-4387, fax: (412) 268-7395 * tech-transfer@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef CONFIG_H #define CONFIG_H /* Include SASLdb Support */ /* #undef AUTH_SASLDB */ /* Do we need a leading _ for dlsym? */ /* #undef DLSYM_NEEDS_UNDERSCORE */ /* Should we build a shared plugin (via dlopen) library? */ /* #undef DO_DLOPEN */ /* should we support sasl_checkapop? */ #define DO_SASL_CHECKAPOP /**/ /* should we support setpass() for SRP? */ /* #undef DO_SRP_SETPASS */ /* Define if your getpwnam_r()/getspnam_r() functions take 5 arguments */ #define GETXXNAM_R_5ARG 1 /* should we mutex-wrap calls into the GSS library? */ /* #undef GSS_USE_MUTEXES */ /* Enable 'alwaystrue' password verifier? */ /* #undef HAVE_ALWAYSTRUE */ /* Define to 1 if you have the `asprintf' function. */ #define HAVE_ASPRINTF 1 /* Include support for Courier's authdaemond? */ #define HAVE_AUTHDAEMON /**/ /* Define to 1 if you have the header file. */ #define HAVE_CRYPT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DES_H */ /* Define to 1 if you have the header file, and it defines `DIR'. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `dns_lookup' function. */ /* #undef HAVE_DNS_LOOKUP */ /* Define to 1 if you have the `dn_expand' function. */ #define HAVE_DN_EXPAND 1 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Do we have a getaddrinfo? */ #define HAVE_GETADDRINFO /**/ /* Define to 1 if you have the `getdomainname' function. */ #define HAVE_GETDOMAINNAME 1 /* Define to 1 if you have the `gethostname' function. */ #define HAVE_GETHOSTNAME 1 /* Do we have a getnameinfo() function? */ #define HAVE_GETNAMEINFO /**/ /* Define to 1 if you have the `getpassphrase' function. */ /* #undef HAVE_GETPASSPHRASE */ /* Define to 1 if you have the `getpwnam' function. */ #define HAVE_GETPWNAM 1 /* Define to 1 if you have the `getspnam' function. */ #define HAVE_GETSPNAM 1 /* do we have getsubopt()? */ #define HAVE_GETSUBOPT /**/ /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Include GSSAPI/Kerberos 5 Support */ /* #undef HAVE_GSSAPI */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_EXT_H */ /* Define if you have the gssapi/gssapi.h header file */ /* #undef HAVE_GSSAPI_GSSAPI_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_KRB5_H */ /* Define if you have the gssapi.h header file */ /* #undef HAVE_GSSAPI_H */ /* Define if your GSSAPI implementation defines gsskrb5_register_acceptor_identity */ /* #undef HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY */ /* Define if your GSSAPI implementation defines GSS_C_NT_HOSTBASED_SERVICE */ /* #undef HAVE_GSS_C_NT_HOSTBASED_SERVICE */ /* Define if your GSSAPI implementation defines GSS_C_NT_USER_NAME */ /* #undef HAVE_GSS_C_NT_USER_NAME */ /* Define if your GSSAPI implementation defines GSS_C_SEC_CONTEXT_SASL_SSF */ /* #undef HAVE_GSS_C_SEC_CONTEXT_SASL_SSF */ /* Define to 1 if you have the `gss_decapsulate_token' function. */ /* #undef HAVE_GSS_DECAPSULATE_TOKEN */ /* Define to 1 if you have the `gss_encapsulate_token' function. */ /* #undef HAVE_GSS_ENCAPSULATE_TOKEN */ /* Define to 1 if you have the `gss_get_name_attribute' function. */ /* #undef HAVE_GSS_GET_NAME_ATTRIBUTE */ /* Define if your GSSAPI implementation defines gss_inquire_sec_context_by_oid */ /* #undef HAVE_GSS_INQUIRE_SEC_CONTEXT_BY_OID */ /* Define to 1 if you have the `gss_oid_equal' function. */ /* #undef HAVE_GSS_OID_EQUAL */ /* Define if your GSSAPI implementation supports SPNEGO */ /* #undef HAVE_GSS_SPNEGO */ /* Include HTTP form Support */ /* #undef HAVE_HTTPFORM */ /* Define to 1 if you have the `inet_aton' function. */ #define HAVE_INET_ATON 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `jrand48' function. */ #define HAVE_JRAND48 1 /* Do we have Kerberos 4 Support? */ /* #undef HAVE_KRB */ /* Define to 1 if you have the header file. */ /* #undef HAVE_KRB5_H */ /* Define to 1 if you have the `krb_get_err_text' function. */ /* #undef HAVE_KRB_GET_ERR_TEXT */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LBER_H */ /* Support for LDAP? */ /* #undef HAVE_LDAP */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LDAP_H */ /* Define to 1 if you have the `resolv' library (-lresolv). */ #define HAVE_LIBRESOLV 1 /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_MALLOC_H 1 /* Define to 1 if you have the `memcpy' function. */ #define HAVE_MEMCPY 1 /* Define to 1 if you have the `memmem' function. */ #define HAVE_MEMMEM 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_MINIX_CONFIG_H */ /* Define to 1 if you have the `mkdir' function. */ #define HAVE_MKDIR 1 /* Do we have mysql support? */ /* #undef HAVE_MYSQL */ /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_NDIR_H */ /* Do we have OpenSSL? */ #define HAVE_OPENSSL /**/ /* Use OPIE for server-side OTP? */ /* #undef HAVE_OPIE */ /* Support for PAM? */ #define HAVE_PAM /**/ /* Define to 1 if you have the header file. */ #define HAVE_PATHS_H 1 /* Do we have Postgres support? */ /* #undef HAVE_PGSQL */ /* Include Support for pwcheck daemon? */ /* #undef HAVE_PWCHECK */ /* Include support for saslauthd? */ #define HAVE_SASLAUTHD /**/ /* Define to 1 if you have the `select' function. */ #define HAVE_SELECT 1 /* Do we have SHA512? */ #define HAVE_SHA512 /**/ /* Include SIA Support */ /* #undef HAVE_SIA */ /* Does the system have snprintf()? */ #define HAVE_SNPRINTF /**/ /* Does sockaddr have an sa_len? */ /* #undef HAVE_SOCKADDR_SA_LEN */ /* Define to 1 if you have the `socket' function. */ #define HAVE_SOCKET 1 /* Do we have a socklen_t? */ #define HAVE_SOCKLEN_T /**/ /* Do we have SQLite support? */ /* #undef HAVE_SQLITE */ /* Do we have SQLite3 support? */ /* #undef HAVE_SQLITE3 */ /* Is there an ss_family in sockaddr_storage? */ #define HAVE_SS_FAMILY /**/ /* Define to 1 if you have the header file. */ #define HAVE_STDARG_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #define HAVE_STRERROR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strlcat' function. */ /* #undef HAVE_STRLCAT */ /* Define to 1 if you have the `strlcpy' function. */ /* #undef HAVE_STRLCPY */ /* Define to 1 if you have the `strspn' function. */ #define HAVE_STRSPN 1 /* Define to 1 if you have the `strstr' function. */ #define HAVE_STRSTR 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Do we have struct sockaddr_stroage? */ #define HAVE_STRUCT_SOCKADDR_STORAGE /**/ /* Define to 1 if you have the header file. */ #define HAVE_SYSEXITS_H 1 /* Define to 1 if you have the `syslog' function. */ #define HAVE_SYSLOG 1 /* Define to 1 if you have the header file. */ #define HAVE_SYSLOG_H 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_DIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_FILE_H 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_NDIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UIO_H 1 /* Define to 1 if you have that is POSIX.1 compatible. */ #define HAVE_SYS_WAIT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_VARARGS_H */ /* Does the system have vsnprintf()? */ #define HAVE_VSNPRINTF /**/ /* Define to 1 if you have the header file. */ #define HAVE_WCHAR_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_WS2TCPIP_H */ /* Should we keep handle to DB open in SASLDB plugin? */ /* #undef KEEP_DB_OPEN */ /* Ignore IP Address in Kerberos 4 tickets? */ /* #undef KRB4_IGNORE_IP_ADDRESS */ /* Using Heimdal */ /* #undef KRB5_HEIMDAL */ /* Define to the sub-directory where libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "cyrus-sasl" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "https://github.com/cyrusimap/cyrus-sasl/issues" /* Define to the full name of this package. */ #define PACKAGE_NAME "cyrus-sasl" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "cyrus-sasl 2.1.28" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "cyrus-sasl" /* Define to the home page for this package. */ #define PACKAGE_URL "https://www.cyrusimap.org" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.1.28" /* Where do we look for Courier authdaemond's socket? */ #define PATH_AUTHDAEMON_SOCKET "/dev/null" /* Where do we look for saslauthd's socket? */ #define PATH_SASLAUTHD_RUNDIR "/run/saslauthd" /* Force a preferred mechanism */ /* #undef PREFER_MECH */ /* Location of pwcheck socket */ /* #undef PWCHECKDIR */ /* Use BerkeleyDB for SASLdb */ /* #undef SASL_BERKELEYDB */ /* Path to default SASLdb database */ #define SASL_DB_PATH "/etc/sasldb2" /* File to use for source of randomness */ #define SASL_DEV_RANDOM "/dev/urandom" /* Use GDBM for SASLdb */ /* #undef SASL_GDBM */ /* Use LMDB for SASLdb */ /* #undef SASL_LMDB */ /* Use NDBM for SASLdb */ /* #undef SASL_NDBM */ /* The size of `long', as computed by sizeof. */ #define SIZEOF_LONG 8 /* Link ANONYMOUS Statically */ #define STATIC_ANONYMOUS /**/ /* Link CRAM-MD5 Statically */ #define STATIC_CRAMMD5 /**/ /* Link DIGEST-MD5 Statically */ #define STATIC_DIGESTMD5 /**/ /* Link GSSAPI Statically */ /* #undef STATIC_GSSAPIV2 */ /* User KERBEROS_V4 Staticly */ /* #undef STATIC_KERBEROS4 */ /* Link ldapdb plugin Statically */ /* #undef STATIC_LDAPDB */ /* Link LOGIN Statically */ /* #undef STATIC_LOGIN */ /* Link NTLM Statically */ /* #undef STATIC_NTLM */ /* Link OTP Statically */ #define STATIC_OTP /**/ /* Link PASSDSS Statically */ /* #undef STATIC_PASSDSS */ /* Link PLAIN Staticly */ #define STATIC_PLAIN /**/ /* Link SASLdb Staticly */ #define STATIC_SASLDB /**/ /* Link SCRAM Statically */ #define STATIC_SCRAM /**/ /* Link SQL plugin statically */ /* #undef STATIC_SQL */ /* Link SRP Statically */ /* #undef STATIC_SRP */ /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #define STDC_HEADERS 1 /* Should we try to dlopen() plugins while statically compiled? */ /* #undef TRY_DLOPEN_WHEN_STATIC */ /* use the doors IPC API for saslauthd? */ /* #undef USE_DOORS */ /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # define _ALL_SOURCE 1 #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # define _DARWIN_C_SOURCE 1 #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # define __EXTENSIONS__ 1 #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # define _HPUX_ALT_XOPEN_SOCKET_API 1 #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX /* # undef _MINIX */ #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # define _NETBSD_SOURCE 1 #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # define _OPENBSD_SOURCE 1 #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE /* # undef _POSIX_SOURCE */ #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE /* # undef _POSIX_1_SOURCE */ #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # define __STDC_WANT_IEC_60559_DFP_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # define __STDC_WANT_LIB_EXT2__ 1 #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # define __STDC_WANT_MATH_SPEC_FUNCS__ 1 #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # define _TANDEM_SOURCE 1 #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE /* # undef _XOPEN_SOURCE */ #endif /* Version number of package */ #define VERSION "2.1.28" /* Use DES */ #define WITH_DES /**/ /* Linking against dmalloc? */ /* #undef WITH_DMALLOC */ /* Use RC4 */ #define WITH_RC4 /**/ /* Use OpenSSL DES Implementation */ #define WITH_SSL_DES /**/ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to `int' if does not define. */ /* #undef mode_t */ /* Define as a signed integer type capable of holding a process identifier. */ /* #undef pid_t */ #define RETSIGTYPE void /* Create a struct iovec if we need one */ #if !defined(_WIN32) #if !defined(HAVE_SYS_UIO_H) /* (win32 is handled in sasl.h) */ struct iovec { char *iov_base; long iov_len; }; #else #include #include #endif #endif /* location of the random number generator */ #ifdef DEV_RANDOM /* #undef DEV_RANDOM */ #endif #define DEV_RANDOM SASL_DEV_RANDOM /* if we've got krb_get_err_txt, we might as well use it; especially since krb_err_txt isn't in some newer distributions (MIT Kerb for Mac 4 being a notable example). If we don't have it, we fall back to the krb_err_txt array */ #ifdef HAVE_KRB_GET_ERR_TEXT #define get_krb_err_txt krb_get_err_text #else #define get_krb_err_txt(X) (krb_err_txt[(X)]) #endif /* Make Solaris happy... */ #ifndef __EXTENSIONS__ #define __EXTENSIONS__ 1 #endif /* Make Linux happy... */ #ifndef _GNU_SOURCE #define _GNU_SOURCE 1 #endif #define SASL_PATH_ENV_VAR "SASL_PATH" #define SASL_CONF_PATH_ENV_VAR "SASL_CONF_PATH" #include #include #ifndef WIN32 # include # include # include # ifdef HAVE_SYS_PARAM_H # include # endif #else /* WIN32 */ # include #endif /* WIN32 */ #include #ifndef HAVE_SOCKLEN_T typedef unsigned int socklen_t; #endif /* HAVE_SOCKLEN_T */ #if !defined(HAVE_STRUCT_SOCKADDR_STORAGE) && !defined(WIN32) #define _SS_MAXSIZE 128 /* Implementation specific max size */ #define _SS_PADSIZE (_SS_MAXSIZE - sizeof (struct sockaddr)) struct sockaddr_storage { struct sockaddr ss_sa; char __ss_pad2[_SS_PADSIZE]; }; # define ss_family ss_sa.sa_family #endif /* !HAVE_STRUCT_SOCKADDR_STORAGE */ #ifndef AF_INET6 /* Define it to something that should never appear */ #define AF_INET6 AF_MAX #endif #ifndef HAVE_GETADDRINFO #define getaddrinfo sasl_getaddrinfo #define freeaddrinfo sasl_freeaddrinfo #define gai_strerror sasl_gai_strerror #endif #ifndef HAVE_GETNAMEINFO #define getnameinfo sasl_getnameinfo #endif #if !defined(HAVE_GETNAMEINFO) || !defined(HAVE_GETADDRINFO) #include "gai.h" #endif #ifndef AI_NUMERICHOST /* support glibc 2.0.x */ #define AI_NUMERICHOST 4 #define NI_NUMERICHOST 2 #define NI_NAMEREQD 4 #define NI_NUMERICSERV 8 #endif #ifndef HAVE_SYSEXITS_H #include "exits.h" #else #include "sysexits.h" #endif /* Get the correct time.h */ #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #ifndef HIER_DELIMITER #define HIER_DELIMITER '/' #endif #ifdef WIN32 #define SASL_ROOT_KEY "SOFTWARE\\Carnegie Mellon\\Project Cyrus\\SASL Library" #define SASL_PLUGIN_PATH_ATTR "SearchPath" #define SASL_CONF_PATH_ATTR "ConfFile" #include inline static unsigned int sleep(unsigned int seconds) { Sleep(seconds * 1000); return 0; } #endif /* handy string manipulation functions */ #ifndef HAVE_STRLCPY extern size_t saslauthd_strlcpy(char *dst, const char *src, size_t len); #define strlcpy(x,y,z) saslauthd_strlcpy((x),(y),(z)) #endif #ifndef HAVE_STRLCAT extern size_t saslauthd_strlcat(char *dst, const char *src, size_t len); #define strlcat(x,y,z) saslauthd_strlcat((x),(y),(z)) #endif #ifndef HAVE_ASPRINTF extern int asprintf(char **str, const char *fmt, ...); #endif #endif /* CONFIG_H */ #if defined __GNUC__ && __GNUC__ > 6 #define GCC_FALLTHROUGH __attribute__((fallthrough)); #else #define GCC_FALLTHROUGH /* fall through */ #endif