diff options
| -rw-r--r-- | 3rdParty/Ldns/src/android/ldns/common.h | 69 | ||||
| -rw-r--r-- | 3rdParty/Ldns/src/android/ldns/config.h | 556 | ||||
| -rw-r--r-- | 3rdParty/Ldns/src/android/ldns/net.h | 208 | ||||
| -rw-r--r-- | 3rdParty/Ldns/src/android/ldns/util.h | 367 | ||||
| -rw-r--r-- | 3rdParty/Unbound/src/android/compat/glob.c | 906 | ||||
| -rw-r--r-- | 3rdParty/Unbound/src/android/compat/glob.h | 105 | ||||
| -rw-r--r-- | 3rdParty/Unbound/src/android/config/config.h | 891 | 
7 files changed, 3102 insertions, 0 deletions
diff --git a/3rdParty/Ldns/src/android/ldns/common.h b/3rdParty/Ldns/src/android/ldns/common.h new file mode 100644 index 0000000..ed3847f --- /dev/null +++ b/3rdParty/Ldns/src/android/ldns/common.h @@ -0,0 +1,69 @@ +/** + * \file common.h + * + * Common definitions for LDNS + */ + +/** + * a Net::DNS like library for C + * + * (c) NLnet Labs, 2004-2006 + * + * See the file LICENSE for the license + */ + +#ifndef LDNS_COMMON_H +#define LDNS_COMMON_H + +/* + * The build configuration that is used in the distributed headers, + * as detected and determined by the auto configure script. + */ +#define LDNS_BUILD_CONFIG_HAVE_SSL         1 +#define LDNS_BUILD_CONFIG_USE_ECDSA        0 +#define LDNS_BUILD_CONFIG_HAVE_INTTYPES_H  1 +#define LDNS_BUILD_CONFIG_HAVE_ATTR_FORMAT 1 +#define LDNS_BUILD_CONFIG_HAVE_ATTR_UNUSED 1 + +/* + * HAVE_STDBOOL_H is not available when distributed as a library, but no build  + * configuration variables may be used (like those above) because the header + * is sometimes only available when using special compiler flags to enable the + * c99 environment. Because we cannot force the usage of this flag, we have to + * provide a default type. Below what is suggested by the autoconf manual. + */ +/*@ignore@*/ +/* splint barfs on this construct */ +#ifdef HAVE_STDBOOL_H +# include <stdbool.h> +#else +# ifndef HAVE__BOOL +#  ifdef __cplusplus +typedef bool _Bool; +#  else +#   define _Bool signed char +#  endif +# endif +# define bool _Bool +# define false 0 +# define true 1 +# define __bool_true_false_are_defined 1 +#endif +/*@end@*/ + +#if LDNS_BUILD_CONFIG_HAVE_ATTR_FORMAT +#define ATTR_FORMAT(archetype, string_index, first_to_check) \ +    __attribute__ ((format (archetype, string_index, first_to_check))) +#else /* !LDNS_BUILD_CONFIG_HAVE_ATTR_FORMAT */ +#define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */ +#endif /* !LDNS_BUILD_CONFIG_HAVE_ATTR_FORMAT */ + +#if defined(__cplusplus) +#define ATTR_UNUSED(x) +#elif LDNS_BUILD_CONFIG_HAVE_ATTR_UNUSED +#define ATTR_UNUSED(x)  x __attribute__((unused)) +#else /* !LDNS_BUILD_CONFIG_HAVE_ATTR_UNUSED */ +#define ATTR_UNUSED(x)  x +#endif /* !LDNS_BUILD_CONFIG_HAVE_ATTR_UNUSED */ + +#endif /* LDNS_COMMON_H */ diff --git a/3rdParty/Ldns/src/android/ldns/config.h b/3rdParty/Ldns/src/android/ldns/config.h new file mode 100644 index 0000000..f618687 --- /dev/null +++ b/3rdParty/Ldns/src/android/ldns/config.h @@ -0,0 +1,556 @@ +/* ldns/config.h.  Generated from config.h.in by configure.  */ +/* ldns/config.h.in.  Generated from configure.ac by autoheader.  */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to 1 if you have the <arpa/inet.h> header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Whether the C compiler accepts the "format" attribute */ +#define HAVE_ATTR_FORMAT 1 + +/* Whether the C compiler accepts the "unused" attribute */ +#define HAVE_ATTR_UNUSED 1 + +/* Define to 1 if you have the `b32_ntop' function. */ +/* #undef HAVE_B32_NTOP */ + +/* Define to 1 if you have the `b32_pton' function. */ +/* #undef HAVE_B32_PTON */ + +/* Define to 1 if you have the `b64_ntop' function. */ +/* #undef HAVE_B64_NTOP */ + +/* Define to 1 if you have the `b64_pton' function. */ +/* #undef HAVE_B64_PTON */ + +/* Define to 1 if you have the `bzero' function. */ +#define HAVE_BZERO 1 + +/* Define to 1 if you have the `calloc' function. */ +#define HAVE_CALLOC 1 + +/* Define to 1 if you have the `ctime_r' function. */ +#define HAVE_CTIME_R 1 + +/* Define to 1 if you have the declaration of `NID_secp384r1', and to 0 if you +   don't. */ +/* #undef HAVE_DECL_NID_SECP384R1 */ + +/* Define to 1 if you have the declaration of `NID_X9_62_prime256v1', and to 0 +   if you don't. */ +/* #undef HAVE_DECL_NID_X9_62_PRIME256V1 */ + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the `endprotoent' function. */ +/* #define HAVE_ENDPROTOENT 1 */ + +/* Define to 1 if you have the `endservent' function. */ +#define HAVE_ENDSERVENT 1 + +/* Define to 1 if you have the `EVP_sha256' function. */ +#define HAVE_EVP_SHA256 1 + +/* Define to 1 if you have the `fcntl' function. */ +#define HAVE_FCNTL 1 + +/* Define to 1 if you have the `fork' function. */ +#define HAVE_FORK 1 + +/* Whether getaddrinfo is available */ +#define HAVE_GETADDRINFO 1 + +/* Define to 1 if you have the <getopt.h> header file. */ +#define HAVE_GETOPT_H 1 + +/* Define to 1 if you have the `gmtime_r' function. */ +#define HAVE_GMTIME_R 1 + +/* If you have HMAC_CTX_init */ +#define HAVE_HMAC_CTX_INIT 1 + +/* Define to 1 if you have the `inet_aton' function. */ +#define HAVE_INET_ATON 1 + +/* Define to 1 if you have the `inet_ntop' function. */ +#define HAVE_INET_NTOP 1 + +/* Define to 1 if you have the `inet_pton' function. */ +#define HAVE_INET_PTON 1 + +/* Define to 1 if the system has the type `intptr_t'. */ +#define HAVE_INTPTR_T 1 + +/* define if you have inttypes.h */ +#define HAVE_INTTYPES_H 1 + +/* if the function 'ioctlsocket' is available */ +/* #undef HAVE_IOCTLSOCKET */ + +/* Define to 1 if you have the `isascii' function. */ +#define HAVE_ISASCII 1 + +/* Define to 1 if you have the `isblank' function. */ +#define HAVE_ISBLANK 1 + +/* Define to 1 if you have the `pcap' library (-lpcap). */ +/* #undef HAVE_LIBPCAP */ + +/* Define to 1 if you have the `localtime_r' function. */ +#define HAVE_LOCALTIME_R 1 + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and +   to 0 otherwise. */ +#define HAVE_MALLOC 1 + +/* Define to 1 if you have the `memmove' function. */ +#define HAVE_MEMMOVE 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `memset' function. */ +#define HAVE_MEMSET 1 + +/* Define to 1 if you have the <netdb.h> header file. */ +#define HAVE_NETDB_H 1 + +/* Define to 1 if you have the <netinet/if_ether.h> header file. */ +/* #undef HAVE_NETINET_IF_ETHER_H */ + +/* Define to 1 if you have the <netinet/igmp.h> header file. */ +/* #undef HAVE_NETINET_IGMP_H */ + +/* Define to 1 if you have the <netinet/in.h> header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the <netinet/in_systm.h> header file. */ +/* #undef HAVE_NETINET_IN_SYSTM_H */ + +/* Define to 1 if you have the <netinet/ip6.h> header file. */ +/* #undef HAVE_NETINET_IP6_H */ + +/* Define to 1 if you have the <netinet/ip_compat.h> header file. */ +/* #undef HAVE_NETINET_IP_COMPAT_H */ + +/* Define to 1 if you have the <netinet/ip.h> header file. */ +/* #undef HAVE_NETINET_IP_H */ + +/* Define to 1 if you have the <netinet/udp.h> header file. */ +/* #undef HAVE_NETINET_UDP_H */ + +/* Define to 1 if you have the <net/ethernet.h> header file. */ +/* #undef HAVE_NET_ETHERNET_H */ + +/* Define to 1 if you have the <net/if.h> header file. */ +/* #undef HAVE_NET_IF_H */ + +/* Define to 1 if you have the <openssl/err.h> header file. */ +#define HAVE_OPENSSL_ERR_H 1 + +/* Define to 1 if you have the <openssl/rand.h> header file. */ +#define HAVE_OPENSSL_RAND_H 1 + +/* Define to 1 if you have the <openssl/ssl.h> header file. */ +#define HAVE_OPENSSL_SSL_H 1 + +/* Define to 1 if you have the <pcap.h> header file. */ +/* #undef HAVE_PCAP_H */ + +/* If available, contains the Python version number currently in use. */ +/* #undef HAVE_PYTHON */ + +/* Define to 1 if you have the `random' function. */ +#define HAVE_RANDOM 1 + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, +   and to 0 otherwise. */ +#define HAVE_REALLOC 1 + +/* Define to 1 if you have the `sleep' function. */ +#define HAVE_SLEEP 1 + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define if you have the SSL libraries installed. */ +#define HAVE_SSL /**/ + +/* Define to 1 if you have the <stdarg.h> header file. */ +#define HAVE_STDARG_H 1 + +/* Define to 1 if stdbool.h conforms to C99. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strlcpy' function. */ +#define HAVE_STRLCPY 1 + +/* Define to 1 if you have the `strtoul' function. */ +#define HAVE_STRTOUL 1 + +/* Define if you have SWIG libraries and header files. */ +/* #undef HAVE_SWIG */ + +/* Define to 1 if you have the <sys/mount.h> header file. */ +#define HAVE_SYS_MOUNT_H 1 + +/* Define to 1 if you have the <sys/param.h> header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* define if you have sys/socket.h */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* define if you have sys/types.h */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the `timegm' function. */ +#define HAVE_TIMEGM 1 + +/* Define to 1 if you have the <time.h> header file. */ +#define HAVE_TIME_H 1 + +/* define if you have unistd.h */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `vfork' function. */ +#define HAVE_VFORK 1 + +/* Define to 1 if you have the <vfork.h> header file. */ +/* #undef HAVE_VFORK_H */ + +/* Define to 1 if you have the <winsock2.h> header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define to 1 if `fork' works. */ +#define HAVE_WORKING_FORK 1 + +/* Define to 1 if `vfork' works. */ +#define HAVE_WORKING_VFORK 1 + +/* Define to 1 if you have the <ws2tcpip.h> header file. */ +/* #undef HAVE_WS2TCPIP_H */ + +/* Define to 1 if the system has the type `_Bool'. */ +#define HAVE__BOOL 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. +   */ +#define LT_OBJDIR ".libs/" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "libdns@nlnetlabs.nl" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "ldns" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "ldns 1.6.12" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libdns" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.6.12" + +/* The size of `time_t', as computed by sizeof. */ +#define SIZEOF_TIME_T 8 + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* System configuration dir */ +#define SYSCONFDIR sysconfdir + +/* Define this to enable ECDSA support. */ +/* #undef USE_ECDSA */ + +/* Define this to enable GOST support. */ +/* #undef USE_GOST */ + +/* Define this to enable SHA256 and SHA512 support. */ +#define USE_SHA2 1 + +/* Enable extensions on AIX 3, Interix.  */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them.  */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris.  */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop.  */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris.  */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Whether the windows socket API is used */ +/* #undef USE_WINSOCK */ + +/* the version of the windows API enabled */ +#define WINVER 0x0502 + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most +   significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +#  define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* #  undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define to 1 if on MINIX. */ +/* #undef _MINIX */ + +/* Define to 2 if the system does not provide POSIX.1 features except with +   this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* in_addr_t */ +/* #undef in_addr_t */ + +/* in_port_t */ +/* #undef in_port_t */ + +/* 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 `short' if <sys/types.h> does not define. */ +/* #undef int16_t */ + +/* Define to `int' if <sys/types.h> does not define. */ +/* #undef int32_t */ + +/* Define to `long long' if <sys/types.h> does not define. */ +/* #undef int64_t */ + +/* Define to `char' if <sys/types.h> does not define. */ +/* #undef int8_t */ + +/* Define to the type of a signed integer type wide enough to hold a pointer, +   if such a type exists, and if the system does not define it. */ +/* #undef intptr_t */ + +/* Define to rpl_malloc if the replacement function should be used. */ +/* #undef malloc */ + +/* Define to `int' if <sys/types.h> does not define. */ +/* #undef pid_t */ + +/* Define to rpl_realloc if the replacement function should be used. */ +/* #undef realloc */ + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* #undef size_t */ + +/* Define to 'int' if not defined */ +/* #undef socklen_t */ + +/* Fallback member name for socket family in struct sockaddr_storage */ +/* #undef ss_family */ + +/* Define to `int' if <sys/types.h> does not define. */ +/* #undef ssize_t */ + +/* Define to `unsigned short' if <sys/types.h> does not define. */ +/* #undef uint16_t */ + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* #undef uint32_t */ + +/* Define to `unsigned long long' if <sys/types.h> does not define. */ +/* #undef uint64_t */ + +/* Define to `unsigned char' if <sys/types.h> does not define. */ +/* #undef uint8_t */ + +/* Define as `fork' if `vfork' does not work. */ +/* #undef vfork */ + + +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <assert.h> + +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif + +#ifndef BYTE_ORDER +#ifdef WORDS_BIGENDIAN +#define BYTE_ORDER BIG_ENDIAN +#else +#define BYTE_ORDER LITTLE_ENDIAN +#endif /* WORDS_BIGENDIAN */ +#endif /* BYTE_ORDER */ + +#if STDC_HEADERS +#include <stdlib.h> +#include <stddef.h> +#endif + +#ifdef HAVE_STDINT_H +#include <stdint.h> +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif + +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif + +#ifdef HAVE_ARPA_INET_H +#include <arpa/inet.h> +#endif + +#ifdef HAVE_WINSOCK2_H +#include <winsock2.h> +#endif + +#ifdef HAVE_WS2TCPIP_H +#include <ws2tcpip.h> +#endif + + +/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */ +#ifdef HAVE_WINSOCK2_H +#define FD_SET_T (u_int) +#else +#define FD_SET_T  +#endif + + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef B64_PTON +int ldns_b64_ntop(uint8_t const *src, size_t srclength, +	 	  char *target, size_t targsize); +/** + * calculates the size needed to store the result of b64_ntop + */ +/*@unused@*/ +static inline size_t ldns_b64_ntop_calculate_size(size_t srcsize) +{ +	return ((((srcsize + 2) / 3) * 4) + 1); +} +#endif /* !B64_PTON */ +#ifndef B64_NTOP +int ldns_b64_pton(char const *src, uint8_t *target, size_t targsize); +/** + * calculates the size needed to store the result of ldns_b64_pton + */ +/*@unused@*/ +static inline size_t ldns_b64_pton_calculate_size(size_t srcsize) +{ +	return (((((srcsize + 3) / 4) * 3)) + 1); +} +#endif /* !B64_NTOP */ + +#ifndef HAVE_SLEEP +/* use windows sleep, in millisecs, instead */ +#define sleep(x) Sleep((x)*1000) +#endif + +#ifndef HAVE_RANDOM +#define srandom(x) srand(x) +#define random(x) rand(x) +#endif + +#ifndef HAVE_TIMEGM +#include <time.h> +time_t timegm (struct tm *tm); +#endif /* !TIMEGM */ +#ifndef HAVE_GMTIME_R +struct tm *gmtime_r(const time_t *timep, struct tm *result); +#endif +#ifndef HAVE_LOCALTIME_R +struct tm *localtime_r(const time_t *timep, struct tm *result); +#endif +#ifndef HAVE_ISBLANK +int isblank(int c); +#endif /* !HAVE_ISBLANK */ +#ifndef HAVE_ISASCII +int isascii(int c); +#endif /* !HAVE_ISASCII */ +#ifndef HAVE_SNPRINTF +#include <stdarg.h> +int snprintf (char *str, size_t count, const char *fmt, ...); +int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); +#endif /* HAVE_SNPRINTF */ +#ifndef HAVE_INET_PTON +int inet_pton(int af, const char* src, void* dst); +#endif /* HAVE_INET_PTON */ +#ifndef HAVE_INET_NTOP +const char *inet_ntop(int af, const void *src, char *dst, size_t size); +#endif +#ifndef HAVE_INET_ATON +int inet_aton(const char *cp, struct in_addr *addr); +#endif +#ifndef HAVE_MEMMOVE +void *memmove(void *dest, const void *src, size_t n); +#endif +#ifndef HAVE_STRLCPY +size_t strlcpy(char *dst, const char *src, size_t siz); +#endif +#ifdef __cplusplus +} +#endif +#ifndef HAVE_GETADDRINFO +#include "compat/fake-rfc2553.h" +#endif +#ifndef HAVE_STRTOUL +#define strtoul (unsigned long)strtol +#endif + diff --git a/3rdParty/Ldns/src/android/ldns/net.h b/3rdParty/Ldns/src/android/ldns/net.h new file mode 100644 index 0000000..cd7bc4b --- /dev/null +++ b/3rdParty/Ldns/src/android/ldns/net.h @@ -0,0 +1,208 @@ +/* + * net.h + * + * DNS Resolver definitions + * + * a Net::DNS like library for C + * + * (c) NLnet Labs, 2005-2006 + * + * See the file LICENSE for the license + */ + +#ifndef LDNS_NET_H +#define LDNS_NET_H + +#include <ldns/ldns.h> +#include <sys/socket.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define LDNS_DEFAULT_TIMEOUT_SEC 5 +#define LDNS_DEFAULT_TIMEOUT_USEC 0 + +/** + * \file + * + * Contains functions to send and receive packets over a network. + */ + +/** + * Sends a buffer to an ip using udp and return the respons as a ldns_pkt + * \param[in] qbin the ldns_buffer to be send + * \param[in] to the ip addr to send to + * \param[in] tolen length of the ip addr + * \param[in] timeout the timeout value for the network + * \param[out] answersize size of the packet + * \param[out] result packet with the answer + * \return status + */ +ldns_status ldns_udp_send(uint8_t **result, ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout, size_t *answersize); + +/** + * Send an udp query and don't wait for an answer but return + * the socket + * \param[in] qbin the ldns_buffer to be send + * \param[in] to the ip addr to send to + * \param[in] tolen length of the ip addr + * \param[in] timeout *unused*, was the timeout value for the network + * \return the socket used + */ + +int ldns_udp_bgsend(ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout); + +/** + * Send an tcp query and don't wait for an answer but return + * the socket + * \param[in] qbin the ldns_buffer to be send + * \param[in] to the ip addr to send to + * \param[in] tolen length of the ip addr + * \param[in] timeout the timeout value for the connect attempt + * \return the socket used + */ +int ldns_tcp_bgsend(ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout); + +/** + * Sends a buffer to an ip using tcp and return the respons as a ldns_pkt + * \param[in] qbin the ldns_buffer to be send + * \param[in] qbin the ldns_buffer to be send + * \param[in] to the ip addr to send to + * \param[in] tolen length of the ip addr + * \param[in] timeout the timeout value for the network + * \param[out] answersize size of the packet + * \param[out] result packet with the answer + * \return status + */ +ldns_status ldns_tcp_send(uint8_t **result, ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout, size_t *answersize); + +/** + * Sends ptk to the nameserver at the resolver object. Returns the data + * as a ldns_pkt + *  + * \param[out] pkt packet received from the nameserver + * \param[in] r the resolver to use  + * \param[in] query_pkt the query to send + * \return status + */ +ldns_status ldns_send(ldns_pkt **pkt, ldns_resolver *r, const ldns_pkt *query_pkt); + +/** + * Sends and ldns_buffer (presumably containing a packet to the nameserver at the resolver object. Returns the data + * as a ldns_pkt + *  + * \param[out] pkt packet received from the nameserver + * \param[in] r the resolver to use  + * \param[in] qb the buffer to send + * \param[in] tsig_mac the tsig MAC to authenticate the response with (NULL to do no TSIG authentication) + * \return status + */ +ldns_status ldns_send_buffer(ldns_pkt **pkt, ldns_resolver *r, ldns_buffer *qb, ldns_rdf *tsig_mac); + +/** + * Create a tcp socket to the specified address + * \param[in] to ip and family + * \param[in] tolen length of to + * \param[in] timeout timeout for the connect attempt + * \return a socket descriptor + */ +int ldns_tcp_connect(const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout); + +/** + * Create a udp socket to the specified address + * \param[in] to ip and family + * \param[in] timeout *unused*, was timeout for the socket + * \return a socket descriptor + */ +int ldns_udp_connect(const struct sockaddr_storage *to, struct timeval timeout); + +/** + * send a query via tcp to a server. Don't want for the answer + * + * \param[in] qbin the buffer to send + * \param[in] sockfd the socket to use + * \param[in] to which ip to send it + * \param[in] tolen socketlen + * \return number of bytes sent + */ +ssize_t ldns_tcp_send_query(ldns_buffer *qbin, int sockfd, const struct sockaddr_storage *to, socklen_t tolen); + +/** + * send a query via udp to a server. Don;t want for the answer + * + * \param[in] qbin the buffer to send + * \param[in] sockfd the socket to use + * \param[in] to which ip to send it + * \param[in] tolen socketlen + * \return number of bytes sent + */ +ssize_t ldns_udp_send_query(ldns_buffer *qbin, int sockfd, const struct sockaddr_storage *to, socklen_t tolen); + +/** + * Gives back a raw packet from the wire and reads the header data from the given + * socket. Allocates the data (of size size) itself, so don't forget to free + * + * \param[in] sockfd the socket to read from + * \param[out] size the number of bytes that are read + * \param[in] timeout the time allowed between packets. + * \return the data read + */ +uint8_t *ldns_tcp_read_wire_timeout(int sockfd, size_t *size, struct timeval timeout); + +/** + * This routine may block. Use ldns_tcp_read_wire_timeout, it checks timeouts. + * Gives back a raw packet from the wire and reads the header data from the given + * socket. Allocates the data (of size size) itself, so don't forget to free + * + * \param[in] sockfd the socket to read from + * \param[out] size the number of bytes that are read + * \return the data read + */ +uint8_t *ldns_tcp_read_wire(int sockfd, size_t *size); + +/** + * Gives back a raw packet from the wire and reads the header data from the given + * socket. Allocates the data (of size size) itself, so don't forget to free + * + * \param[in] sockfd the socket to read from + * \param[in] fr the address of the client (if applicable) + * \param[in] *frlen the lenght of the client's addr (if applicable) + * \param[out] size the number of bytes that are read + * \return the data read + */ +uint8_t *ldns_udp_read_wire(int sockfd, size_t *size, struct sockaddr_storage *fr, socklen_t *frlen); + +/** + * returns the native sockaddr representation from the rdf. + * \param[in] rd the ldns_rdf to operate on + * \param[in] port what port to use. 0 means; use default (53) + * \param[out] size what is the size of the sockaddr_storage + * \return struct sockaddr* the address in the format so other + * functions can use it (sendto) + */ +struct sockaddr_storage * ldns_rdf2native_sockaddr_storage(const ldns_rdf *rd, uint16_t port, size_t *size); + +/** + * returns an rdf with the sockaddr info. works for ip4 and ip6 + * \param[in] sock the struct sockaddr_storage to convert + * \param[in] port what port was used. When NULL this is not set + * \return ldns_rdf* wth the address + */ +ldns_rdf * ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port); + +/** + * Prepares the resolver for an axfr query + * The query is sent and the answers can be read with ldns_axfr_next + * \param[in] resolver the resolver to use + * \param[in] domain the domain to exfr + * \param[in] c the class to use + * \return ldns_status the status of the transfer + */ +ldns_status ldns_axfr_start(ldns_resolver *resolver, ldns_rdf *domain, ldns_rr_class c); + +#ifdef __cplusplus +} +#endif + +#endif  /* LDNS_NET_H */ diff --git a/3rdParty/Ldns/src/android/ldns/util.h b/3rdParty/Ldns/src/android/ldns/util.h new file mode 100644 index 0000000..eb7658e --- /dev/null +++ b/3rdParty/Ldns/src/android/ldns/util.h @@ -0,0 +1,367 @@ +/* + * util.h + *   + * helper function header file + *  + * a Net::DNS like library for C + *  + * (c) NLnet Labs, 2004 + *  + * See the file LICENSE for the license + */ + +#ifndef _UTIL_H +#define _UTIL_H + +#include <inttypes.h> +#include <sys/types.h> +#include <unistd.h> +#include <ldns/common.h> +#include <time.h> +#include <stdio.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define dprintf(X,Y) fprintf(stderr, (X), (Y)) +/* #define	dprintf(X, Y)  */ + +#define LDNS_VERSION "1.6.12" +#define LDNS_REVISION ((1<<16)|(6<<8)|(12)) + +/** + * splint static inline workaround + */ +#ifdef S_SPLINT_S +#  define INLINE  +#else +#  ifdef SWIG +#    define INLINE static +#  else +#    define INLINE static inline +#  endif +#endif + +/** + * Memory management macros + */ +#define LDNS_MALLOC(type)		LDNS_XMALLOC(type, 1) + +#define LDNS_XMALLOC(type, count)	((type *) malloc((count) * sizeof(type))) + +#define LDNS_CALLOC(type, count)	((type *) calloc((count), sizeof(type))) + +#define LDNS_REALLOC(ptr, type)		LDNS_XREALLOC((ptr), type, 1) + +#define LDNS_XREALLOC(ptr, type, count)				\ +	((type *) realloc((ptr), (count) * sizeof(type))) + +#define LDNS_FREE(ptr) \ +	do { free((ptr)); (ptr) = NULL; } while (0) + +#define LDNS_DEP     printf("DEPRECATED FUNCTION!\n"); + +/* + * Copy data allowing for unaligned accesses in network byte order + * (big endian). + */ +INLINE uint16_t +ldns_read_uint16(const void *src) +{ +#ifdef ALLOW_UNALIGNED_ACCESSES +	return ntohs(*(uint16_t *) src); +#else +	uint8_t *p = (uint8_t *) src; +	return ((uint16_t) p[0] << 8) | (uint16_t) p[1]; +#endif +} + +INLINE uint32_t +ldns_read_uint32(const void *src) +{ +#ifdef ALLOW_UNALIGNED_ACCESSES +	return ntohl(*(uint32_t *) src); +#else +	uint8_t *p = (uint8_t *) src; +	return (  ((uint32_t) p[0] << 24) +		| ((uint32_t) p[1] << 16) +		| ((uint32_t) p[2] << 8) +		|  (uint32_t) p[3]); +#endif +} + +/* + * Copy data allowing for unaligned accesses in network byte order + * (big endian). + */ +INLINE void +ldns_write_uint16(void *dst, uint16_t data) +{ +#ifdef ALLOW_UNALIGNED_ACCESSES +	* (uint16_t *) dst = htons(data); +#else +	uint8_t *p = (uint8_t *) dst; +	p[0] = (uint8_t) ((data >> 8) & 0xff); +	p[1] = (uint8_t) (data & 0xff); +#endif +} + +INLINE void +ldns_write_uint32(void *dst, uint32_t data) +{ +#ifdef ALLOW_UNALIGNED_ACCESSES +	* (uint32_t *) dst = htonl(data); +#else +	uint8_t *p = (uint8_t *) dst; +	p[0] = (uint8_t) ((data >> 24) & 0xff); +	p[1] = (uint8_t) ((data >> 16) & 0xff); +	p[2] = (uint8_t) ((data >> 8) & 0xff); +	p[3] = (uint8_t) (data & 0xff); +#endif +} + +/* warning. */ +INLINE void +ldns_write_uint64_as_uint48(void *dst, uint64_t data) +{ +	uint8_t *p = (uint8_t *) dst; +	p[0] = (uint8_t) ((data >> 40) & 0xff); +	p[1] = (uint8_t) ((data >> 32) & 0xff); +	p[2] = (uint8_t) ((data >> 24) & 0xff); +	p[3] = (uint8_t) ((data >> 16) & 0xff); +	p[4] = (uint8_t) ((data >> 8) & 0xff); +	p[5] = (uint8_t) (data & 0xff); +} + + +/** + * Structure to do a Schwartzian-like transformation, for instance when + * sorting. If you need a transformation on the objects that are sorted, + * you can sue this to store the transformed values, so you do not + * need to do the transformation again for each comparison + */ +struct ldns_schwartzian_compare_struct { +	void *original_object; +	void *transformed_object; +}; + +/** A general purpose lookup table + *   + *  Lookup tables are arrays of (id, name) pairs, + *  So you can for instance lookup the RCODE 3, which is "NXDOMAIN", + *  and vice versa. The lookup tables themselves are defined wherever needed, + *  for instance in \ref host2str.c + */ +struct ldns_struct_lookup_table { +        int id; +        const char *name; +}; +typedef struct ldns_struct_lookup_table ldns_lookup_table; +   +/** + * Looks up the table entry by name, returns NULL if not found. + * \param[in] table the lookup table to search in + * \param[in] name what to search for + * \return the item found + */ +ldns_lookup_table *ldns_lookup_by_name(ldns_lookup_table table[], +                                       const char *name); + +/** + * Looks up the table entry by id, returns NULL if not found. + * \param[in] table the lookup table to search in + * \param[in] id what to search for + * \return the item found + */ +ldns_lookup_table *ldns_lookup_by_id(ldns_lookup_table table[], int id); + +/** + * Returns the value of the specified bit + * The bits are counted from left to right, so bit #0 is the + * left most bit. + * \param[in] bits array holding the bits + * \param[in] index to the wanted bit + * \return  + */ +int ldns_get_bit(uint8_t bits[], size_t index); + + +/** + * Returns the value of the specified bit + * The bits are counted from right to left, so bit #0 is the + * right most bit. + * \param[in] bits array holding the bits + * \param[in] index to the wanted bit + * \return 1 or 0 depending no the bit state + */ +int ldns_get_bit_r(uint8_t bits[], size_t index); + +/** + * sets the specified bit in the specified byte to + * 1 if value is true, 0 if false + * The bits are counted from right to left, so bit #0 is the + * right most bit. + * \param[in] byte the bit to set the bit in + * \param[in] bit_nr the bit to set (0 <= n <= 7) + * \param[in] value whether to set the bit to 1 or 0 + * \return 1 or 0 depending no the bit state + */ +void ldns_set_bit(uint8_t *byte, int bit_nr, bool value); + +/** + * Returns the value of a to the power of b + * (or 1 of b < 1) + */ +/*@unused@*/ +INLINE long +ldns_power(long a, long b) { +	long result = 1; +	while (b > 0) { +		if (b & 1) { +			result *= a; +			if (b == 1) { +				return result; +			} +		} +		a *= a; +		b /= 2; +	} +	return result; +} + +/** + * Returns the int value of the given (hex) digit + * \param[in] ch the hex char to convert + * \return the converted decimal value + */ +int ldns_hexdigit_to_int(char ch); + +/** + * Returns the char (hex) representation of the given int + * \param[in] ch the int to convert + * \return the converted hex char + */ +char ldns_int_to_hexdigit(int ch); + +/** + * Converts a hex string to binary data + * + * \param[out] data The binary result is placed here. + * At least strlen(str)/2 bytes should be allocated + * \param[in] str The hex string to convert. + * This string should not contain spaces + * \return The number of bytes of converted data, or -1 if one of the arguments * is NULL, or -2 if the string length is not an even number + */ +int +ldns_hexstring_to_data(uint8_t *data, const char *str); + +/** + * Show the internal library version + * \return a string with the version in it + */ +const char * ldns_version(void); + +/** + * Convert TM to seconds since epoch (midnight, January 1st, 1970). + * Like timegm(3), which is not always available. + * \param[in] tm a struct tm* with the date + * \return the seconds since epoch + */ +time_t mktime_from_utc(const struct tm *tm); + +/** + * The function interprets time as the number of seconds since epoch + * with respect to now using serial arithmitics (rfc1982). + * That number of seconds is then converted to broken-out time information. + * This is especially usefull when converting the inception and expiration + * fields of RRSIG records. + * + * \param[in] time number of seconds since epoch (midnight, January 1st, 1970) + *            to be intepreted as a serial arithmitics number relative to now. + * \param[in] now number of seconds since epoch (midnight, January 1st, 1970) + *            to which the time value is compared to determine the final value. + * \param[out] result the struct with the broken-out time information + * \return result on success or NULL on error + */ +struct tm * ldns_serial_arithmitics_gmtime_r(int32_t time, time_t now, struct tm *result); +  +/** + * Seed the random function. + * If the file descriptor is specified, the random generator is seeded with + * data from that file. If not, /dev/urandom is used. + * + * applications should call this if they need entropy data within ldns + * If openSSL is available, it is automatically seeded from /dev/urandom + * or /dev/random. + * + * If you need more entropy, or have no openssl available, this function + * MUST be called at the start of the program + * + * If openssl *is* available, this function just adds more entropy + * + * \param[in] fd a file providing entropy data for the seed + * \param[in] size the number of bytes to use as entropy data. If this is 0, + *            only the minimal amount is taken (usually 4 bytes) + * \return 0 if seeding succeeds, 1 if it fails + */ +int ldns_init_random(FILE *fd, unsigned int size); + +/** + * Get random number. + * \return random number. + * + */ +uint16_t ldns_get_random(void); + +/** + * Encode data as BubbleBabble + * + * \param[in] data a pointer to data to be encoded + * \param[in] len size the number of bytes of data + * \return a string of BubbleBabble + */ +char *ldns_bubblebabble(uint8_t *data, size_t len); + +#ifndef B32_NTOP +int ldns_b32_ntop(uint8_t const *src, size_t srclength, +	     char *target, size_t targsize); +int b32_ntop(uint8_t const *src, size_t srclength, +	     char *target, size_t targsize); +int ldns_b32_ntop_extended_hex(uint8_t const *src, size_t srclength, +	     char *target, size_t targsize); +int b32_ntop_extended_hex(uint8_t const *src, size_t srclength, +	     char *target, size_t targsize); +/** + * calculates the size needed to store the result of b32_ntop + */ +/*@unused@*/ +INLINE size_t ldns_b32_ntop_calculate_size(size_t srcsize) +{ +	size_t result = ((((srcsize / 5) * 8) - 2) + 2); +	return result; +} +#endif /* !B32_NTOP */ +#ifndef B32_PTON +int ldns_b32_pton(char const *src, size_t hashed_owner_str_len, uint8_t *target, size_t targsize); +int b32_pton(char const *src, size_t hashed_owner_str_len, uint8_t *target, size_t targsize); +int ldns_b32_pton_extended_hex(char const *src, size_t hashed_owner_str_len, uint8_t *target, size_t targsize); +int b32_pton_extended_hex(char const *src, size_t hashed_owner_str_len, uint8_t *target, size_t targsize); +/** + * calculates the size needed to store the result of b32_pton + */ +/*@unused@*/ +INLINE size_t ldns_b32_pton_calculate_size(size_t srcsize) +{ +	size_t result = ((((srcsize) / 8) * 5)); +	return result; +} +#endif /* !B32_PTON */ + +INLINE time_t ldns_time(time_t *t) { return time(t); } + +#ifdef __cplusplus +} +#endif + +#endif /* !_UTIL_H */ diff --git a/3rdParty/Unbound/src/android/compat/glob.c b/3rdParty/Unbound/src/android/compat/glob.c new file mode 100644 index 0000000..cec80ed --- /dev/null +++ b/3rdParty/Unbound/src/android/compat/glob.c @@ -0,0 +1,906 @@ +/* + * Natanael Arndt, 2011: removed collate.h dependencies + *  (my changes are trivial) + * + * Copyright (c) 1989, 1993 + *	The Regents of the University of California.  All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Guido van Rossum. + * + * 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. + * 4. Neither the name of the University nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)glob.c	8.3 (Berkeley) 10/13/93"; +#endif /* LIBC_SCCS and not lint */ +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +/* + * glob(3) -- a superset of the one defined in POSIX 1003.2. + * + * The [!...] convention to negate a range is supported (SysV, Posix, ksh). + * + * Optional extra services, controlled by flags not defined by POSIX: + * + * GLOB_QUOTE: + *	Escaping convention: \ inhibits any special meaning the following + *	character might have (except \ at end of string is retained). + * GLOB_MAGCHAR: + *	Set in gl_flags if pattern contained a globbing character. + * GLOB_NOMAGIC: + *	Same as GLOB_NOCHECK, but it will only append pattern if it did + *	not contain any magic characters.  [Used in csh style globbing] + * GLOB_ALTDIRFUNC: + *	Use alternately specified directory access functions. + * GLOB_TILDE: + *	expand ~user/foo to the /home/dir/of/user/foo + * GLOB_BRACE: + *	expand {1,2}{a,b} to 1a 1b 2a 2b + * gl_matchc: + *	Number of matches in the current invocation of glob. + */ + +/* + * Some notes on multibyte character support: + * 1. Patterns with illegal byte sequences match nothing - even if + *    GLOB_NOCHECK is specified. + * 2. Illegal byte sequences in filenames are handled by treating them as + *    single-byte characters with a value of the first byte of the sequence + *    cast to wchar_t. + * 3. State-dependent encodings are not currently supported. + */ + +#include <sys/param.h> +#include <sys/stat.h> + +#include <ctype.h> +#include <dirent.h> +#include <errno.h> +#include <glob.h> +#include <limits.h> +#include <pwd.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <wchar.h> + +#define	DOLLAR		'$' +#define	DOT		'.' +#define	EOS		'\0' +#define	LBRACKET	'[' +#define	NOT		'!' +#define	QUESTION	'?' +#define	QUOTE		'\\' +#define	RANGE		'-' +#define	RBRACKET	']' +#define	SEP		'/' +#define	STAR		'*' +#define	TILDE		'~' +#define	UNDERSCORE	'_' +#define	LBRACE		'{' +#define	RBRACE		'}' +#define	SLASH		'/' +#define	COMMA		',' + +#ifndef DEBUG + +#define	M_QUOTE		0x8000000000ULL +#define	M_PROTECT	0x4000000000ULL +#define	M_MASK		0xffffffffffULL +#define	M_CHAR		0x00ffffffffULL + +typedef uint_fast64_t Char; + +#else + +#define	M_QUOTE		0x80 +#define	M_PROTECT	0x40 +#define	M_MASK		0xff +#define	M_CHAR		0x7f + +typedef char Char; + +#endif + + +#define	CHAR(c)		((Char)((c)&M_CHAR)) +#define	META(c)		((Char)((c)|M_QUOTE)) +#define	M_ALL		META('*') +#define	M_END		META(']') +#define	M_NOT		META('!') +#define	M_ONE		META('?') +#define	M_RNG		META('-') +#define	M_SET		META('[') +#define	ismeta(c)	(((c)&M_QUOTE) != 0) + + +static int	 compare(const void *, const void *); +static int	 g_Ctoc(const Char *, char *, size_t); +static int	 g_lstat(Char *, struct stat *, glob_t *); +static DIR	*g_opendir(Char *, glob_t *); +static const Char *g_strchr(const Char *, wchar_t); +#ifdef notdef +static Char	*g_strcat(Char *, const Char *); +#endif +static int	 g_stat(Char *, struct stat *, glob_t *); +static int	 glob0(const Char *, glob_t *, size_t *); +static int	 glob1(Char *, glob_t *, size_t *); +static int	 glob2(Char *, Char *, Char *, Char *, glob_t *, size_t *); +static int	 glob3(Char *, Char *, Char *, Char *, Char *, glob_t *, size_t *); +static int	 globextend(const Char *, glob_t *, size_t *); +static const Char *	 +		 globtilde(const Char *, Char *, size_t, glob_t *); +static int	 globexp1(const Char *, glob_t *, size_t *); +static int	 globexp2(const Char *, const Char *, glob_t *, int *, size_t *); +static int	 match(Char *, Char *, Char *); +#ifdef DEBUG +static void	 qprintf(const char *, Char *); +#endif + +int +glob(const char *pattern, int flags, int (*errfunc)(const char *, int), glob_t *pglob) +{ +	const char *patnext; +	size_t limit; +	Char *bufnext, *bufend, patbuf[MAXPATHLEN], prot; +	mbstate_t mbs; +	wchar_t wc; +	size_t clen; + +	patnext = pattern; +	if (!(flags & GLOB_APPEND)) { +		pglob->gl_pathc = 0; +		pglob->gl_pathv = NULL; +		if (!(flags & GLOB_DOOFFS)) +			pglob->gl_offs = 0; +	} +	if (flags & GLOB_LIMIT) { +		limit = pglob->gl_matchc; +		if (limit == 0) +			limit = ARG_MAX; +	} else +		limit = 0; +	pglob->gl_flags = flags & ~GLOB_MAGCHAR; +	pglob->gl_errfunc = errfunc; +	pglob->gl_matchc = 0; + +	bufnext = patbuf; +	bufend = bufnext + MAXPATHLEN - 1; +	if (flags & GLOB_NOESCAPE) { +		memset(&mbs, 0, sizeof(mbs)); +		while (bufend - bufnext >= MB_CUR_MAX) { +			clen = mbrtowc(&wc, patnext, MB_LEN_MAX, &mbs); +			if (clen == (size_t)-1 || clen == (size_t)-2) +				return (GLOB_NOMATCH); +			else if (clen == 0) +				break; +			*bufnext++ = wc; +			patnext += clen; +		} +	} else { +		/* Protect the quoted characters. */ +		memset(&mbs, 0, sizeof(mbs)); +		while (bufend - bufnext >= MB_CUR_MAX) { +			if (*patnext == QUOTE) { +				if (*++patnext == EOS) { +					*bufnext++ = QUOTE | M_PROTECT; +					continue; +				} +				prot = M_PROTECT; +			} else +				prot = 0; +			clen = mbrtowc(&wc, patnext, MB_LEN_MAX, &mbs); +			if (clen == (size_t)-1 || clen == (size_t)-2) +				return (GLOB_NOMATCH); +			else if (clen == 0) +				break; +			*bufnext++ = wc | prot; +			patnext += clen; +		} +	} +	*bufnext = EOS; + +	if (flags & GLOB_BRACE) +	    return globexp1(patbuf, pglob, &limit); +	else +	    return glob0(patbuf, pglob, &limit); +} + +/* + * Expand recursively a glob {} pattern. When there is no more expansion + * invoke the standard globbing routine to glob the rest of the magic + * characters + */ +static int +globexp1(const Char *pattern, glob_t *pglob, size_t *limit) +{ +	const Char* ptr = pattern; +	int rv; + +	/* Protect a single {}, for find(1), like csh */ +	if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS) +		return glob0(pattern, pglob, limit); + +	while ((ptr = g_strchr(ptr, LBRACE)) != NULL) +		if (!globexp2(ptr, pattern, pglob, &rv, limit)) +			return rv; + +	return glob0(pattern, pglob, limit); +} + + +/* + * Recursive brace globbing helper. Tries to expand a single brace. + * If it succeeds then it invokes globexp1 with the new pattern. + * If it fails then it tries to glob the rest of the pattern and returns. + */ +static int +globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv, size_t *limit) +{ +	int     i; +	Char   *lm, *ls; +	const Char *pe, *pm, *pm1, *pl; +	Char    patbuf[MAXPATHLEN]; + +	/* copy part up to the brace */ +	for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++) +		continue; +	*lm = EOS; +	ls = lm; + +	/* Find the balanced brace */ +	for (i = 0, pe = ++ptr; *pe; pe++) +		if (*pe == LBRACKET) { +			/* Ignore everything between [] */ +			for (pm = pe++; *pe != RBRACKET && *pe != EOS; pe++) +				continue; +			if (*pe == EOS) { +				/* +				 * We could not find a matching RBRACKET. +				 * Ignore and just look for RBRACE +				 */ +				pe = pm; +			} +		} +		else if (*pe == LBRACE) +			i++; +		else if (*pe == RBRACE) { +			if (i == 0) +				break; +			i--; +		} + +	/* Non matching braces; just glob the pattern */ +	if (i != 0 || *pe == EOS) { +		*rv = glob0(patbuf, pglob, limit); +		return 0; +	} + +	for (i = 0, pl = pm = ptr; pm <= pe; pm++) +		switch (*pm) { +		case LBRACKET: +			/* Ignore everything between [] */ +			for (pm1 = pm++; *pm != RBRACKET && *pm != EOS; pm++) +				continue; +			if (*pm == EOS) { +				/* +				 * We could not find a matching RBRACKET. +				 * Ignore and just look for RBRACE +				 */ +				pm = pm1; +			} +			break; + +		case LBRACE: +			i++; +			break; + +		case RBRACE: +			if (i) { +			    i--; +			    break; +			} +			/* FALLTHROUGH */ +		case COMMA: +			if (i && *pm == COMMA) +				break; +			else { +				/* Append the current string */ +				for (lm = ls; (pl < pm); *lm++ = *pl++) +					continue; +				/* +				 * Append the rest of the pattern after the +				 * closing brace +				 */ +				for (pl = pe + 1; (*lm++ = *pl++) != EOS;) +					continue; + +				/* Expand the current pattern */ +#ifdef DEBUG +				qprintf("globexp2:", patbuf); +#endif +				*rv = globexp1(patbuf, pglob, limit); + +				/* move after the comma, to the next string */ +				pl = pm + 1; +			} +			break; + +		default: +			break; +		} +	*rv = 0; +	return 0; +} + + + +/* + * expand tilde from the passwd file. + */ +static const Char * +globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob) +{ +	struct passwd *pwd; +	char *h; +	const Char *p; +	Char *b, *eb; + +	if (*pattern != TILDE || !(pglob->gl_flags & GLOB_TILDE)) +		return pattern; + +	/*  +	 * Copy up to the end of the string or /  +	 */ +	eb = &patbuf[patbuf_len - 1]; +	for (p = pattern + 1, h = (char *) patbuf; +	    h < (char *)eb && *p && *p != SLASH; *h++ = *p++) +		continue; + +	*h = EOS; + +	if (((char *) patbuf)[0] == EOS) { +		/* +		 * handle a plain ~ or ~/ by expanding $HOME first (iff +		 * we're not running setuid or setgid) and then trying +		 * the password file +		 */ +		if (issetugid() != 0 || +		    (h = getenv("HOME")) == NULL) { +			if (((h = getlogin()) != NULL && +			     (pwd = getpwnam(h)) != NULL) || +			    (pwd = getpwuid(getuid())) != NULL) +				h = pwd->pw_dir; +			else +				return pattern; +		} +	} +	else { +		/* +		 * Expand a ~user +		 */ +		if ((pwd = getpwnam((char*) patbuf)) == NULL) +			return pattern; +		else +			h = pwd->pw_dir; +	} + +	/* Copy the home directory */ +	for (b = patbuf; b < eb && *h; *b++ = *h++) +		continue; + +	/* Append the rest of the pattern */ +	while (b < eb && (*b++ = *p++) != EOS) +		continue; +	*b = EOS; + +	return patbuf; +} + + +/* + * The main glob() routine: compiles the pattern (optionally processing + * quotes), calls glob1() to do the real pattern matching, and finally + * sorts the list (unless unsorted operation is requested).  Returns 0 + * if things went well, nonzero if errors occurred. + */ +static int +glob0(const Char *pattern, glob_t *pglob, size_t *limit) +{ +	const Char *qpatnext; +	int err; +	size_t oldpathc; +	Char *bufnext, c, patbuf[MAXPATHLEN]; + +	qpatnext = globtilde(pattern, patbuf, MAXPATHLEN, pglob); +	oldpathc = pglob->gl_pathc; +	bufnext = patbuf; + +	/* We don't need to check for buffer overflow any more. */ +	while ((c = *qpatnext++) != EOS) { +		switch (c) { +		case LBRACKET: +			c = *qpatnext; +			if (c == NOT) +				++qpatnext; +			if (*qpatnext == EOS || +			    g_strchr(qpatnext+1, RBRACKET) == NULL) { +				*bufnext++ = LBRACKET; +				if (c == NOT) +					--qpatnext; +				break; +			} +			*bufnext++ = M_SET; +			if (c == NOT) +				*bufnext++ = M_NOT; +			c = *qpatnext++; +			do { +				*bufnext++ = CHAR(c); +				if (*qpatnext == RANGE && +				    (c = qpatnext[1]) != RBRACKET) { +					*bufnext++ = M_RNG; +					*bufnext++ = CHAR(c); +					qpatnext += 2; +				} +			} while ((c = *qpatnext++) != RBRACKET); +			pglob->gl_flags |= GLOB_MAGCHAR; +			*bufnext++ = M_END; +			break; +		case QUESTION: +			pglob->gl_flags |= GLOB_MAGCHAR; +			*bufnext++ = M_ONE; +			break; +		case STAR: +			pglob->gl_flags |= GLOB_MAGCHAR; +			/* collapse adjacent stars to one, +			 * to avoid exponential behavior +			 */ +			if (bufnext == patbuf || bufnext[-1] != M_ALL) +			    *bufnext++ = M_ALL; +			break; +		default: +			*bufnext++ = CHAR(c); +			break; +		} +	} +	*bufnext = EOS; +#ifdef DEBUG +	qprintf("glob0:", patbuf); +#endif + +	if ((err = glob1(patbuf, pglob, limit)) != 0) +		return(err); + +	/* +	 * If there was no match we are going to append the pattern +	 * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified +	 * and the pattern did not contain any magic characters +	 * GLOB_NOMAGIC is there just for compatibility with csh. +	 */ +	if (pglob->gl_pathc == oldpathc) { +		if (((pglob->gl_flags & GLOB_NOCHECK) || +		    ((pglob->gl_flags & GLOB_NOMAGIC) && +			!(pglob->gl_flags & GLOB_MAGCHAR)))) +			return(globextend(pattern, pglob, limit)); +		else +			return(GLOB_NOMATCH); +	} +	if (!(pglob->gl_flags & GLOB_NOSORT)) +		qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc, +		    pglob->gl_pathc - oldpathc, sizeof(char *), compare); +	return(0); +} + +static int +compare(const void *p, const void *q) +{ +	return(strcmp(*(char **)p, *(char **)q)); +} + +static int +glob1(Char *pattern, glob_t *pglob, size_t *limit) +{ +	Char pathbuf[MAXPATHLEN]; + +	/* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */ +	if (*pattern == EOS) +		return(0); +	return(glob2(pathbuf, pathbuf, pathbuf + MAXPATHLEN - 1, +	    pattern, pglob, limit)); +} + +/* + * The functions glob2 and glob3 are mutually recursive; there is one level + * of recursion for each segment in the pattern that contains one or more + * meta characters. + */ +static int +glob2(Char *pathbuf, Char *pathend, Char *pathend_last, Char *pattern, +      glob_t *pglob, size_t *limit) +{ +	struct stat sb; +	Char *p, *q; +	int anymeta; + +	/* +	 * Loop over pattern segments until end of pattern or until +	 * segment with meta character found. +	 */ +	for (anymeta = 0;;) { +		if (*pattern == EOS) {		/* End of pattern? */ +			*pathend = EOS; +			if (g_lstat(pathbuf, &sb, pglob)) +				return(0); + +			if (((pglob->gl_flags & GLOB_MARK) && +			    pathend[-1] != SEP) && (S_ISDIR(sb.st_mode) +			    || (S_ISLNK(sb.st_mode) && +			    (g_stat(pathbuf, &sb, pglob) == 0) && +			    S_ISDIR(sb.st_mode)))) { +				if (pathend + 1 > pathend_last) +					return (GLOB_ABORTED); +				*pathend++ = SEP; +				*pathend = EOS; +			} +			++pglob->gl_matchc; +			return(globextend(pathbuf, pglob, limit)); +		} + +		/* Find end of next segment, copy tentatively to pathend. */ +		q = pathend; +		p = pattern; +		while (*p != EOS && *p != SEP) { +			if (ismeta(*p)) +				anymeta = 1; +			if (q + 1 > pathend_last) +				return (GLOB_ABORTED); +			*q++ = *p++; +		} + +		if (!anymeta) {		/* No expansion, do next segment. */ +			pathend = q; +			pattern = p; +			while (*pattern == SEP) { +				if (pathend + 1 > pathend_last) +					return (GLOB_ABORTED); +				*pathend++ = *pattern++; +			} +		} else			/* Need expansion, recurse. */ +			return(glob3(pathbuf, pathend, pathend_last, pattern, p, +			    pglob, limit)); +	} +	/* NOTREACHED */ +} + +static int +glob3(Char *pathbuf, Char *pathend, Char *pathend_last, +      Char *pattern, Char *restpattern, +      glob_t *pglob, size_t *limit) +{ +	struct dirent *dp; +	DIR *dirp; +	int err; +	char buf[MAXPATHLEN]; + +	/* +	 * The readdirfunc declaration can't be prototyped, because it is +	 * assigned, below, to two functions which are prototyped in glob.h +	 * and dirent.h as taking pointers to differently typed opaque +	 * structures. +	 */ +	struct dirent *(*readdirfunc)(); + +	if (pathend > pathend_last) +		return (GLOB_ABORTED); +	*pathend = EOS; +	errno = 0; + +	if ((dirp = g_opendir(pathbuf, pglob)) == NULL) { +		/* TODO: don't call for ENOENT or ENOTDIR? */ +		if (pglob->gl_errfunc) { +			if (g_Ctoc(pathbuf, buf, sizeof(buf))) +				return (GLOB_ABORTED); +			if (pglob->gl_errfunc(buf, errno) || +			    pglob->gl_flags & GLOB_ERR) +				return (GLOB_ABORTED); +		} +		return(0); +	} + +	err = 0; + +	/* Search directory for matching names. */ +	if (pglob->gl_flags & GLOB_ALTDIRFUNC) +		readdirfunc = pglob->gl_readdir; +	else +		readdirfunc = readdir; +	while ((dp = (*readdirfunc)(dirp))) { +		char *sc; +		Char *dc; +		wchar_t wc; +		size_t clen; +		mbstate_t mbs; + +		/* Initial DOT must be matched literally. */ +		if (dp->d_name[0] == DOT && *pattern != DOT) +			continue; +		memset(&mbs, 0, sizeof(mbs)); +		dc = pathend; +		sc = dp->d_name; +		while (dc < pathend_last) { +			clen = mbrtowc(&wc, sc, MB_LEN_MAX, &mbs); +			if (clen == (size_t)-1 || clen == (size_t)-2) { +				wc = *sc; +				clen = 1; +				memset(&mbs, 0, sizeof(mbs)); +			} +			if ((*dc++ = wc) == EOS) +				break; +			sc += clen; +		} +		if (!match(pathend, pattern, restpattern)) { +			*pathend = EOS; +			continue; +		} +		err = glob2(pathbuf, --dc, pathend_last, restpattern, +		    pglob, limit); +		if (err) +			break; +	} + +	if (pglob->gl_flags & GLOB_ALTDIRFUNC) +		(*pglob->gl_closedir)(dirp); +	else +		closedir(dirp); +	return(err); +} + + +/* + * Extend the gl_pathv member of a glob_t structure to accomodate a new item, + * add the new item, and update gl_pathc. + * + * This assumes the BSD realloc, which only copies the block when its size + * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic + * behavior. + * + * Return 0 if new item added, error code if memory couldn't be allocated. + * + * Invariant of the glob_t structure: + *	Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and + *	gl_pathv points to (gl_offs + gl_pathc + 1) items. + */ +static int +globextend(const Char *path, glob_t *pglob, size_t *limit) +{ +	char **pathv; +	size_t i, newsize, len; +	char *copy; +	const Char *p; + +	if (*limit && pglob->gl_pathc > *limit) { +		errno = 0; +		return (GLOB_NOSPACE); +	} + +	newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs); +	pathv = pglob->gl_pathv ? +		    realloc((char *)pglob->gl_pathv, newsize) : +		    malloc(newsize); +	if (pathv == NULL) { +		if (pglob->gl_pathv) { +			free(pglob->gl_pathv); +			pglob->gl_pathv = NULL; +		} +		return(GLOB_NOSPACE); +	} + +	if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { +		/* first time around -- clear initial gl_offs items */ +		pathv += pglob->gl_offs; +		for (i = pglob->gl_offs + 1; --i > 0; ) +			*--pathv = NULL; +	} +	pglob->gl_pathv = pathv; + +	for (p = path; *p++;) +		continue; +	len = MB_CUR_MAX * (size_t)(p - path);	/* XXX overallocation */ +	if ((copy = malloc(len)) != NULL) { +		if (g_Ctoc(path, copy, len)) { +			free(copy); +			return (GLOB_NOSPACE); +		} +		pathv[pglob->gl_offs + pglob->gl_pathc++] = copy; +	} +	pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; +	return(copy == NULL ? GLOB_NOSPACE : 0); +} + +/* + * pattern matching function for filenames.  Each occurrence of the * + * pattern causes a recursion level. + */ +static int +match(Char *name, Char *pat, Char *patend) +{ +	int ok, negate_range; +	Char c, k; + +	while (pat < patend) { +		c = *pat++; +		switch (c & M_MASK) { +		case M_ALL: +			if (pat == patend) +				return(1); +			do +			    if (match(name, pat, patend)) +				    return(1); +			while (*name++ != EOS); +			return(0); +		case M_ONE: +			if (*name++ == EOS) +				return(0); +			break; +		case M_SET: +			ok = 0; +			if ((k = *name++) == EOS) +				return(0); +			if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS) +				++pat; +			while (((c = *pat++) & M_MASK) != M_END) +				if ((*pat & M_MASK) == M_RNG) { +					if (CHAR(c) <= CHAR(k) && CHAR(k) <= CHAR(pat[1])) ok = 1; +					pat += 2; +				} else if (c == k) +					ok = 1; +			if (ok == negate_range) +				return(0); +			break; +		default: +			if (*name++ != c) +				return(0); +			break; +		} +	} +	return(*name == EOS); +} + +/* Free allocated data belonging to a glob_t structure. */ +void +globfree(glob_t *pglob) +{ +	size_t i; +	char **pp; + +	if (pglob->gl_pathv != NULL) { +		pp = pglob->gl_pathv + pglob->gl_offs; +		for (i = pglob->gl_pathc; i--; ++pp) +			if (*pp) +				free(*pp); +		free(pglob->gl_pathv); +		pglob->gl_pathv = NULL; +	} +} + +static DIR * +g_opendir(Char *str, glob_t *pglob) +{ +	char buf[MAXPATHLEN]; + +	if (!*str) +		strcpy(buf, "."); +	else { +		if (g_Ctoc(str, buf, sizeof(buf))) +			return (NULL); +	} + +	if (pglob->gl_flags & GLOB_ALTDIRFUNC) +		return((*pglob->gl_opendir)(buf)); + +	return(opendir(buf)); +} + +static int +g_lstat(Char *fn, struct stat *sb, glob_t *pglob) +{ +	char buf[MAXPATHLEN]; + +	if (g_Ctoc(fn, buf, sizeof(buf))) { +		errno = ENAMETOOLONG; +		return (-1); +	} +	if (pglob->gl_flags & GLOB_ALTDIRFUNC) +		return((*pglob->gl_lstat)(buf, sb)); +	return(lstat(buf, sb)); +} + +static int +g_stat(Char *fn, struct stat *sb, glob_t *pglob) +{ +	char buf[MAXPATHLEN]; + +	if (g_Ctoc(fn, buf, sizeof(buf))) { +		errno = ENAMETOOLONG; +		return (-1); +	} +	if (pglob->gl_flags & GLOB_ALTDIRFUNC) +		return((*pglob->gl_stat)(buf, sb)); +	return(stat(buf, sb)); +} + +static const Char * +g_strchr(const Char *str, wchar_t ch) +{ + +	do { +		if (*str == ch) +			return (str); +	} while (*str++); +	return (NULL); +} + +static int +g_Ctoc(const Char *str, char *buf, size_t len) +{ +	mbstate_t mbs; +	size_t clen; + +	memset(&mbs, 0, sizeof(mbs)); +	while (len >= MB_CUR_MAX) { +		clen = wcrtomb(buf, *str, &mbs); +		if (clen == (size_t)-1) +			return (1); +		if (*str == L'\0') +			return (0); +		str++; +		buf += clen; +		len -= clen; +	} +	return (1); +} + +#ifdef DEBUG +static void +qprintf(const char *str, Char *s) +{ +	Char *p; + +	(void)printf("%s:\n", str); +	for (p = s; *p; p++) +		(void)printf("%c", CHAR(*p)); +	(void)printf("\n"); +	for (p = s; *p; p++) +		(void)printf("%c", *p & M_PROTECT ? '"' : ' '); +	(void)printf("\n"); +	for (p = s; *p; p++) +		(void)printf("%c", ismeta(*p) ? '_' : ' '); +	(void)printf("\n"); +} +#endif diff --git a/3rdParty/Unbound/src/android/compat/glob.h b/3rdParty/Unbound/src/android/compat/glob.h new file mode 100644 index 0000000..351b6c4 --- /dev/null +++ b/3rdParty/Unbound/src/android/compat/glob.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) 1989, 1993 + *	The Regents of the University of California.  All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Guido van Rossum. + * + * 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. Neither the name of the University nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + *	@(#)glob.h	8.1 (Berkeley) 6/2/93 + * $FreeBSD$ + */ + +#ifndef _GLOB_H_ +#define	_GLOB_H_ + +#include <sys/cdefs.h> +#include <sys/_types.h> + +#ifndef	_SIZE_T_DECLARED +typedef	__size_t	size_t; +#define	_SIZE_T_DECLARED +#endif + +struct stat; +typedef struct { +	size_t gl_pathc;	/* Count of total paths so far. */ +	size_t gl_matchc;	/* Count of paths matching pattern. */ +	size_t gl_offs;		/* Reserved at beginning of gl_pathv. */ +	int gl_flags;		/* Copy of flags parameter to glob. */ +	char **gl_pathv;	/* List of paths matching pattern. */ +				/* Copy of errfunc parameter to glob. */ +	int (*gl_errfunc)(const char *, int); + +	/* +	 * Alternate filesystem access methods for glob; replacement +	 * versions of closedir(3), readdir(3), opendir(3), stat(2) +	 * and lstat(2). +	 */ +	void (*gl_closedir)(void *); +	struct dirent *(*gl_readdir)(void *); +	void *(*gl_opendir)(const char *); +	int (*gl_lstat)(const char *, struct stat *); +	int (*gl_stat)(const char *, struct stat *); +} glob_t; + +#if __POSIX_VISIBLE >= 199209 +/* Believed to have been introduced in 1003.2-1992 */ +#define	GLOB_APPEND	0x0001	/* Append to output from previous call. */ +#define	GLOB_DOOFFS	0x0002	/* Use gl_offs. */ +#define	GLOB_ERR	0x0004	/* Return on error. */ +#define	GLOB_MARK	0x0008	/* Append / to matching directories. */ +#define	GLOB_NOCHECK	0x0010	/* Return pattern itself if nothing matches. */ +#define	GLOB_NOSORT	0x0020	/* Don't sort. */ +#define	GLOB_NOESCAPE	0x2000	/* Disable backslash escaping. */ + +/* Error values returned by glob(3) */ +#define	GLOB_NOSPACE	(-1)	/* Malloc call failed. */ +#define	GLOB_ABORTED	(-2)	/* Unignored error. */ +#define	GLOB_NOMATCH	(-3)	/* No match and GLOB_NOCHECK was not set. */ +#define	GLOB_NOSYS	(-4)	/* Obsolete: source comptability only. */ +#endif /* __POSIX_VISIBLE >= 199209 */ + +#if __BSD_VISIBLE +#define	GLOB_ALTDIRFUNC	0x0040	/* Use alternately specified directory funcs. */ +#define	GLOB_BRACE	0x0080	/* Expand braces ala csh. */ +#define	GLOB_MAGCHAR	0x0100	/* Pattern had globbing characters. */ +#define	GLOB_NOMAGIC	0x0200	/* GLOB_NOCHECK without magic chars (csh). */ +#define	GLOB_QUOTE	0x0400	/* Quote special chars with \. */ +#define	GLOB_TILDE	0x0800	/* Expand tilde names from the passwd file. */ +#define	GLOB_LIMIT	0x1000	/* limit number of returned paths */ + +/* source compatibility, these are the old names */ +#define GLOB_MAXPATH	GLOB_LIMIT +#define	GLOB_ABEND	GLOB_ABORTED +#endif /* __BSD_VISIBLE */ + +__BEGIN_DECLS +int	glob(const char *, int, int (*)(const char *, int), glob_t *); +void	globfree(glob_t *); +__END_DECLS + +#endif /* !_GLOB_H_ */ diff --git a/3rdParty/Unbound/src/android/config/config.h b/3rdParty/Unbound/src/android/config/config.h new file mode 100644 index 0000000..4b75720 --- /dev/null +++ b/3rdParty/Unbound/src/android/config/config.h @@ -0,0 +1,891 @@ +/* config.h.  Generated from config.h.in by configure.  */ +/* config.h.in.  Generated from configure.ac by autoheader.  */ + +/* Directory to chroot to */ +#define CHROOT_DIR "" + +/* Pathname to the Unbound configuration file */ +#define CONFIGFILE "/usr/local/etc/unbound/unbound.conf" + +/* configure flags */ +#define CONFIGURE_BUILD_WITH " '--disable-gost' '--with-ldns=/Users/tobias/Downloads/ldns-1.6.12'" + +/* configure date */ +#define CONFIGURE_DATE "Fri Mar  9 23:52:43 CET 2012" + +/* configure target system */ +#define CONFIGURE_TARGET "x86_64-apple-darwin10.8.0" + +/* Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work +   */ +/* #undef DARWIN_BROKEN_SETREUID */ + +/* Whether daemon is deprecated */ +#define DEPRECATED_DAEMON 1 + +/* Define if you want to use debug lock checking (slow). */ +/* #undef ENABLE_LOCK_CHECKS */ + +/* Define this if you enabled-allsymbols from libunbound to link binaries to +   it for smaller install size, but the libunbound export table is polluted by +   internal symbols */ +/* #undef EXPORT_ALL_SYMBOLS */ + +/* Define to 1 if you have the <arpa/inet.h> header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Whether the C compiler accepts the "format" attribute */ +#define HAVE_ATTR_FORMAT 1 + +/* Whether the C compiler accepts the "unused" attribute */ +#define HAVE_ATTR_UNUSED 1 + +/* Define to 1 if your system has a working `chown' function. */ +#define HAVE_CHOWN 1 + +/* Define to 1 if you have the `chroot' function. */ +#define HAVE_CHROOT 1 + +/* Define to 1 if you have the `ctime_r' function. */ +#define HAVE_CTIME_R 1 + +/* Define to 1 if you have the `daemon' function. */ +#define HAVE_DAEMON 1 + +/* Define to 1 if you have the declaration of `sk_SSL_COMP_pop_free', and to 0 +   if you don't. */ +#define HAVE_DECL_SK_SSL_COMP_POP_FREE 1 + +/* Define to 1 if you have the declaration of +   `SSL_COMP_get_compression_methods', and to 0 if you don't. */ +#define HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS 1 + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the `event_base_free' function. */ +/* #undef HAVE_EVENT_BASE_FREE */ + +/* Define to 1 if you have the `event_base_get_method' function. */ +/* #undef HAVE_EVENT_BASE_GET_METHOD */ + +/* Define to 1 if you have the `event_base_new' function. */ +/* #undef HAVE_EVENT_BASE_NEW */ + +/* Define to 1 if you have the `event_base_once' function. */ +/* #undef HAVE_EVENT_BASE_ONCE */ + +/* Define to 1 if you have the <event.h> header file. */ +/* #undef HAVE_EVENT_H */ + +/* Define to 1 if you have the `EVP_sha1' function. */ +#define HAVE_EVP_SHA1 1 + +/* Define to 1 if you have the `EVP_sha256' function. */ +#define HAVE_EVP_SHA256 1 + +/* Define to 1 if you have the `EVP_sha512' function. */ +#define HAVE_EVP_SHA512 1 + +/* Define to 1 if you have the `ev_default_loop' function. */ +/* #undef HAVE_EV_DEFAULT_LOOP */ + +/* Define to 1 if you have the `ev_loop' function. */ +/* #undef HAVE_EV_LOOP */ + +/* Define to 1 if you have the <expat.h> header file. */ +#define HAVE_EXPAT_H 1 + +/* Define to 1 if you have the `fcntl' function. */ +#define HAVE_FCNTL 1 + +/* Define to 1 if you have the `fork' function. */ +#define HAVE_FORK 1 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#define HAVE_FSEEKO 1 + +/* Whether getaddrinfo is available */ +#define HAVE_GETADDRINFO 1 + +/* Define to 1 if you have the <getopt.h> header file. */ +#define HAVE_GETOPT_H 1 + +/* Define to 1 if you have the `getpwnam' function. */ +#define HAVE_GETPWNAM 1 + +/* Define to 1 if you have the `getrlimit' function. */ +#define HAVE_GETRLIMIT 1 + +/* Define to 1 if you have the `glob' function. */ +#define HAVE_GLOB 1 + +/* Define to 1 if you have the <glob.h> header file. */ +#define HAVE_GLOB_H 1 + +/* Define to 1 if you have the `gmtime_r' function. */ +#define HAVE_GMTIME_R 1 + +/* Define to 1 if you have the <grp.h> header file. */ +#define HAVE_GRP_H 1 + +/* If you have HMAC_CTX_init */ +#define HAVE_HMAC_CTX_INIT 1 + +/* Define to 1 if you have the `inet_aton' function. */ +#define HAVE_INET_ATON 1 + +/* Define to 1 if you have the `inet_ntop' function. */ +#define HAVE_INET_NTOP 1 + +/* Define to 1 if you have the `inet_pton' function. */ +#define HAVE_INET_PTON 1 + +/* Define to 1 if you have the `initgroups' function. */ +#define HAVE_INITGROUPS 1 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* if the function 'ioctlsocket' is available */ +/* #undef HAVE_IOCTLSOCKET */ + +/* Define to 1 if you have the <iphlpapi.h> header file. */ +/* #undef HAVE_IPHLPAPI_H */ + +/* Define to 1 if you have the `kill' function. */ +#define HAVE_KILL 1 + +/* Define to 1 if you have the `ldns_key_EVP_unload_gost' function. */ +/* #undef HAVE_LDNS_KEY_EVP_UNLOAD_GOST */ + +/* Define to 1 if you have the <ldns/ldns.h> header file. */ +#define HAVE_LDNS_LDNS_H 1 + +/* Define to 1 if you have the `ldns' library (-lldns). */ +#define HAVE_LIBLDNS 1 + +/* Define to 1 if you have the `localtime_r' function. */ +#define HAVE_LOCALTIME_R 1 + +/* Define to 1 if you have the <login_cap.h> header file. */ +/* #undef HAVE_LOGIN_CAP_H */ + +/* If have GNU libc compatible malloc */ +#define HAVE_MALLOC 1 + +/* Define to 1 if you have the `memmove' function. */ +#define HAVE_MEMMOVE 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the <netdb.h> header file. */ +#define HAVE_NETDB_H 1 + +/* Define to 1 if you have the <netinet/in.h> header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the `OPENSSL_config' function. */ +#define HAVE_OPENSSL_CONFIG 1 + +/* Define to 1 if you have the <openssl/conf.h> header file. */ +#define HAVE_OPENSSL_CONF_H 1 + +/* Define to 1 if you have the <openssl/engine.h> header file. */ +#define HAVE_OPENSSL_ENGINE_H 1 + +/* Define to 1 if you have the <openssl/err.h> header file. */ +#define HAVE_OPENSSL_ERR_H 1 + +/* Define to 1 if you have the <openssl/rand.h> header file. */ +#define HAVE_OPENSSL_RAND_H 1 + +/* Define to 1 if you have the <openssl/ssl.h> header file. */ +#define HAVE_OPENSSL_SSL_H 1 + +/* Define if you have POSIX threads libraries and header files. */ +#define HAVE_PTHREAD 1 + +/* Define to 1 if the system has the type `pthread_rwlock_t'. */ +#define HAVE_PTHREAD_RWLOCK_T 1 + +/* Define to 1 if the system has the type `pthread_spinlock_t'. */ +/* #undef HAVE_PTHREAD_SPINLOCK_T */ + +/* Define to 1 if you have the <pwd.h> header file. */ +#define HAVE_PWD_H 1 + +/* Define if you have Python libraries and header files. */ +/* #undef HAVE_PYTHON */ + +/* Define to 1 if you have the `random' function. */ +#define HAVE_RANDOM 1 + +/* Define to 1 if you have the `recvmsg' function. */ +#define HAVE_RECVMSG 1 + +/* Define to 1 if you have the `sbrk' function. */ +#define HAVE_SBRK 1 + +/* Define to 1 if you have the `sendmsg' function. */ +#define HAVE_SENDMSG 1 + +/* Define to 1 if you have the `setregid' function. */ +#define HAVE_SETREGID 1 + +/* Define to 1 if you have the `setresgid' function. */ +/* #undef HAVE_SETRESGID */ + +/* Define to 1 if you have the `setresuid' function. */ +/* #undef HAVE_SETRESUID */ + +/* Define to 1 if you have the `setreuid' function. */ +#define HAVE_SETREUID 1 + +/* Define to 1 if you have the `setrlimit' function. */ +#define HAVE_SETRLIMIT 1 + +/* Define to 1 if you have the `setsid' function. */ +#define HAVE_SETSID 1 + +/* Define to 1 if you have the `setusercontext' function. */ +/* #undef HAVE_SETUSERCONTEXT */ + +/* Define to 1 if you have the `sigprocmask' function. */ +#define HAVE_SIGPROCMASK 1 + +/* Define to 1 if you have the `sleep' function. */ +#define HAVE_SLEEP 1 + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define to 1 if you have the `socketpair' function. */ +#define HAVE_SOCKETPAIR 1 + +/* Using Solaris threads */ +/* #undef HAVE_SOLARIS_THREADS */ + +/* Define to 1 if you have the `srandom' function. */ +#define HAVE_SRANDOM 1 + +/* Define if you have the SSL libraries installed. */ +#define HAVE_SSL /**/ + +/* Define to 1 if you have the <stdarg.h> header file. */ +#define HAVE_STDARG_H 1 + +/* Define to 1 if you have the <stdbool.h> header file. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strftime' function. */ +#define HAVE_STRFTIME 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strlcpy' function. */ +#define HAVE_STRLCPY 1 + +/* Define to 1 if you have the `strptime' function. */ +#define HAVE_STRPTIME 1 + +/* Define if you have Swig libraries and header files. */ +/* #undef HAVE_SWIG */ + +/* Define to 1 if you have the <syslog.h> header file. */ +#define HAVE_SYSLOG_H 1 + +/* Define to 1 if you have the <sys/param.h> header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the <sys/resource.h> header file. */ +#define HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <sys/uio.h> header file. */ +#define HAVE_SYS_UIO_H 1 + +/* Define to 1 if you have the <sys/wait.h> header file. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the <time.h> header file. */ +#define HAVE_TIME_H 1 + +/* Define to 1 if you have the `tzset' function. */ +#define HAVE_TZSET 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `usleep' function. */ +#define HAVE_USLEEP 1 + +/* Define to 1 if you have the `vfork' function. */ +#define HAVE_VFORK 1 + +/* Define to 1 if you have the <vfork.h> header file. */ +/* #undef HAVE_VFORK_H */ + +/* Define to 1 if you have the <windows.h> header file. */ +/* #undef HAVE_WINDOWS_H */ + +/* Using Windows threads */ +/* #undef HAVE_WINDOWS_THREADS */ + +/* Define to 1 if you have the <winsock2.h> header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define to 1 if `fork' works. */ +#define HAVE_WORKING_FORK 1 + +/* Define to 1 if `vfork' works. */ +#define HAVE_WORKING_VFORK 1 + +/* Define to 1 if you have the `writev' function. */ +#define HAVE_WRITEV 1 + +/* Define to 1 if you have the <ws2tcpip.h> header file. */ +/* #undef HAVE_WS2TCPIP_H */ + +/* Define to 1 if you have the `_beginthreadex' function. */ +/* #undef HAVE__BEGINTHREADEX */ + +/* if lex has yylex_destroy */ +#define LEX_HAS_YYLEX_DESTROY 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. +   */ +#define LT_OBJDIR ".libs/" + +/* Define to the maximum message length to pass to syslog. */ +#define MAXSYSLOGMSGLEN 10240 + +/* Define if memcmp() does not compare unsigned bytes */ +/* #undef MEMCMP_IS_BROKEN */ + +/* Define if mkdir has one argument. */ +/* #undef MKDIR_HAS_ONE_ARG */ + +/* Define if the network stack does not fully support nonblocking io (causes +   lower performance). */ +/* #undef NONBLOCKING_IS_BROKEN */ + +/* Put -D_ALL_SOURCE define in config.h */ +/* #undef OMITTED__D_ALL_SOURCE */ + +/* Put -D_BSD_SOURCE define in config.h */ +/* #undef OMITTED__D_BSD_SOURCE */ + +/* Put -D_GNU_SOURCE define in config.h */ +/* #undef OMITTED__D_GNU_SOURCE */ + +/* Put -D_LARGEFILE_SOURCE=1 define in config.h */ +/* #undef OMITTED__D_LARGEFILE_SOURCE_1 */ + +/* Put -D_POSIX_C_SOURCE=200112 define in config.h */ +/* #undef OMITTED__D_POSIX_C_SOURCE_200112 */ + +/* Put -D_XOPEN_SOURCE=600 define in config.h */ +/* #undef OMITTED__D_XOPEN_SOURCE_600 */ + +/* Put -D_XOPEN_SOURCE_EXTENDED=1 define in config.h */ +/* #undef OMITTED__D_XOPEN_SOURCE_EXTENDED_1 */ + +/* Put -D__EXTENSIONS__ define in config.h */ +/* #undef OMITTED__D__EXTENSIONS__ */ + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "unbound-bugs@nlnetlabs.nl" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "unbound" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "unbound 1.4.16" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "unbound" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.4.16" + +/* default pidfile location */ +#define PIDFILE "/usr/local/etc/unbound/unbound.pid" + +/* Define to necessary symbol if this constant uses a non-standard name on +   your system. */ +/* #undef PTHREAD_CREATE_JOINABLE */ + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void + +/* default rootkey location */ +#define ROOT_ANCHOR_FILE "/usr/local/etc/unbound/root.key" + +/* default rootcert location */ +#define ROOT_CERT_FILE "/usr/local/etc/unbound/icannbundle.pem" + +/* version number for resource files */ +#define RSRC_PACKAGE_VERSION 1,4,1,6 + +/* Directory to chdir to */ +#define RUN_DIR "/usr/local/etc/unbound" + +/* Shared data */ +#define SHARE_DIR "/usr/local/etc/unbound" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* use default strptime. */ +/* #undef STRPTIME_WORKS */ + +/* Use win32 resources and API */ +/* #undef UB_ON_WINDOWS */ + +/* default username */ +#define UB_USERNAME "unbound" + +/* use to enable lightweight alloc assertions, for debug use */ +/* #undef UNBOUND_ALLOC_LITE */ + +/* use malloc not regions, for debug use */ +/* #undef UNBOUND_ALLOC_NONREGIONAL */ + +/* use statistics for allocs and frees, for debug use */ +/* #undef UNBOUND_ALLOC_STATS */ + +/* define this to enable debug checks. */ +/* #undef UNBOUND_DEBUG */ + +/* Define this to enable GOST support. */ +/* #undef USE_GOST */ + +/* Define if you want to use internal select based events */ +#define USE_MINI_EVENT 1 + +/* Define this to enable SHA256 and SHA512 support. */ +#define USE_SHA2 1 + +/* Enable extensions on AIX 3, Interix.  */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them.  */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris.  */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop.  */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris.  */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Whether the windows socket API is used */ +/* #undef USE_WINSOCK */ + +/* the version of the windows API enabled */ +#define WINVER 0x0502 + +/* Define if you want Python module. */ +/* #undef WITH_PYTHONMODULE */ + +/* Define if you want PyUnbound. */ +/* #undef WITH_PYUNBOUND */ + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a +   `char[]'. */ +#define YYTEXT_POINTER 1 + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +/* #undef _LARGEFILE_SOURCE */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to 1 if on MINIX. */ +/* #undef _MINIX */ + +/* Define to 2 if the system does not provide POSIX.1 features except with +   this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to `int' if <sys/types.h> doesn't define. */ +/* #undef gid_t */ + +/* in_addr_t */ +/* #undef in_addr_t */ + +/* in_port_t */ +/* #undef in_port_t */ + +/* 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 `short' if <sys/types.h> does not define. */ +/* #undef int16_t */ + +/* Define to `int' if <sys/types.h> does not define. */ +/* #undef int32_t */ + +/* Define to `long long' if <sys/types.h> does not define. */ +/* #undef int64_t */ + +/* Define to `signed char' if <sys/types.h> does not define. */ +/* #undef int8_t */ + +/* Define if replacement function should be used. */ +/* #undef malloc */ + +/* Define to `long int' if <sys/types.h> does not define. */ +/* #undef off_t */ + +/* Define to `int' if <sys/types.h> does not define. */ +/* #undef pid_t */ + +/* Define to 'int' if not defined */ +/* #undef rlim_t */ + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* #undef size_t */ + +/* Define to 'int' if not defined */ +/* #undef socklen_t */ + +/* Define to `int' if <sys/types.h> does not define. */ +/* #undef ssize_t */ + +/* Define to 'unsigned char if not defined */ +/* #undef u_char */ + +/* Define to `int' if <sys/types.h> doesn't define. */ +/* #undef uid_t */ + +/* Define to `unsigned short' if <sys/types.h> does not define. */ +/* #undef uint16_t */ + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* #undef uint32_t */ + +/* Define to `unsigned long long' if <sys/types.h> does not define. */ +/* #undef uint64_t */ + +/* Define to `unsigned char' if <sys/types.h> does not define. */ +/* #undef uint8_t */ + +/* Define as `fork' if `vfork' does not work. */ +/* #undef vfork */ + +#ifdef __ANDROID__  +#ifndef in_port_t  +#define in_port_t uint16_t  +#endif +#endif  + +#if defined(OMITTED__D_GNU_SOURCE) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE 1 +#endif  + +#if defined(OMITTED__D_BSD_SOURCE) && !defined(_BSD_SOURCE) +#define _BSD_SOURCE 1 +#endif  + +#if defined(OMITTED__D__EXTENSIONS__) && !defined(__EXTENSIONS__) +#define __EXTENSIONS__ 1 +#endif  + +#if defined(OMITTED__D_POSIX_C_SOURCE_200112) && !defined(_POSIX_C_SOURCE) +#define _POSIX_C_SOURCE 200112 +#endif  + +#if defined(OMITTED__D_XOPEN_SOURCE_600) && !defined(_XOPEN_SOURCE) +#define _XOPEN_SOURCE 600 +#endif  + +#if defined(OMITTED__D_XOPEN_SOURCE_EXTENDED_1) && !defined(_XOPEN_SOURCE_EXTENDED) +#define _XOPEN_SOURCE_EXTENDED 1 +#endif  + +#if defined(OMITTED__D_ALL_SOURCE) && !defined(_ALL_SOURCE) +#define _ALL_SOURCE 1 +#endif  + +#if defined(OMITTED__D_LARGEFILE_SOURCE_1) && !defined(_LARGEFILE_SOURCE) +#define _LARGEFILE_SOURCE 1 +#endif  + + + + +#ifndef UNBOUND_DEBUG +#  define NDEBUG +#endif + +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <assert.h> + +#if STDC_HEADERS +#include <stdlib.h> +#include <stddef.h> +#endif + +#ifdef HAVE_STDINT_H +#include <stdint.h> +#endif + +#include <errno.h> + +#if HAVE_SYS_PARAM_H +#include <sys/param.h> +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif + +#ifdef HAVE_SYS_UIO_H +#include <sys/uio.h> +#endif + +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif + +#ifdef HAVE_ARPA_INET_H +#include <arpa/inet.h> +#endif + +#ifdef HAVE_WINSOCK2_H +#include <winsock2.h> +#endif + +#ifdef HAVE_WS2TCPIP_H +#include <ws2tcpip.h> +#endif + + +  +#ifdef HAVE_ATTR_FORMAT +#  define ATTR_FORMAT(archetype, string_index, first_to_check) \ +    __attribute__ ((format (archetype, string_index, first_to_check))) +#else /* !HAVE_ATTR_FORMAT */ +#  define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */ +#endif /* !HAVE_ATTR_FORMAT */ + + +#if defined(DOXYGEN) +#  define ATTR_UNUSED(x)  x +#elif defined(__cplusplus) +#  define ATTR_UNUSED(x) +#elif defined(HAVE_ATTR_UNUSED) +#  define ATTR_UNUSED(x)  x __attribute__((unused)) +#else /* !HAVE_ATTR_UNUSED */ +#  define ATTR_UNUSED(x)  x +#endif /* !HAVE_ATTR_UNUSED */ + + +#ifndef HAVE_FSEEKO +#define fseeko fseek +#define ftello ftell +#endif /* HAVE_FSEEKO */ + + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 256 +#endif + + +#ifndef HAVE_SNPRINTF +#define snprintf snprintf_unbound +#define vsnprintf vsnprintf_unbound +#include <stdarg.h> +int snprintf (char *str, size_t count, const char *fmt, ...); +int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); +#endif /* HAVE_SNPRINTF */ + + +#ifndef HAVE_INET_PTON +#define inet_pton inet_pton_unbound +int inet_pton(int af, const char* src, void* dst); +#endif /* HAVE_INET_PTON */ + + +#ifndef HAVE_INET_NTOP +#define inet_ntop inet_ntop_unbound +const char *inet_ntop(int af, const void *src, char *dst, size_t size); +#endif + + +#ifndef HAVE_INET_ATON +#define inet_aton inet_aton_unbound +int inet_aton(const char *cp, struct in_addr *addr); +#endif + + +#ifndef HAVE_MEMMOVE +#define memmove memmove_unbound +void *memmove(void *dest, const void *src, size_t n); +#endif + + +#ifndef HAVE_STRLCPY +#define strlcpy strlcpy_unbound +size_t strlcpy(char *dst, const char *src, size_t siz); +#endif + + +#ifndef HAVE_GMTIME_R +#define gmtime_r gmtime_r_unbound +struct tm *gmtime_r(const time_t *timep, struct tm *result); +#endif + + +#ifndef HAVE_SLEEP +#define sleep(x) Sleep((x)*1000) /* on win32 */ +#endif /* HAVE_SLEEP */ + + +#ifndef HAVE_USLEEP +#define usleep(x) Sleep((x)/1000 + 1) /* on win32 */ +#endif /* HAVE_USLEEP */ + + +#ifndef HAVE_RANDOM +#define random rand /* on win32, for tests only (bad random) */ +#endif /* HAVE_RANDOM */ + + +#ifndef HAVE_SRANDOM +#define srandom(x) srand(x) /* on win32, for tests only (bad random) */ +#endif /* HAVE_SRANDOM */ + + +/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */ +#ifdef HAVE_WINSOCK2_H +#define FD_SET_T (u_int) +#else +#define FD_SET_T  +#endif + + +#ifndef IPV6_MIN_MTU +#define IPV6_MIN_MTU 1280 +#endif /* IPV6_MIN_MTU */ + + +#ifdef MEMCMP_IS_BROKEN +#  ifdef memcmp +/* #  undef memcmp */ +#  endif +#define memcmp memcmp_unbound +int memcmp(const void *x, const void *y, size_t n); +#endif + + + +#ifndef HAVE_CTIME_R +#define ctime_r unbound_ctime_r +char *ctime_r(const time_t *timep, char *buf); +#endif + +#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS) +#define strptime unbound_strptime +struct tm; +char *strptime(const char *s, const char *format, struct tm *tm); +#endif + +#if defined(HAVE_EVENT_H) && !defined(HAVE_EVENT_BASE_ONCE) && !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && (defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS)) +   /* using version of libevent that is not threadsafe. */ +#  define LIBEVENT_SIGNAL_PROBLEM 1 +#endif + +#ifndef CHECKED_INET6 +#  define CHECKED_INET6 +#  ifdef AF_INET6 +#    define INET6 +#  else +#    define AF_INET6        28 +#  endif +#endif /* CHECKED_INET6 */ + +/* maximum nesting of included files */ +#define MAXINCLUDES 10 +#ifndef HAVE_GETADDRINFO +struct sockaddr_storage; +#include "compat/fake-rfc2553.h" +#endif + +#ifdef UNBOUND_ALLOC_STATS +#  define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__) +#  define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__) +#  define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) +#  define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) +void *unbound_stat_malloc(size_t size); +void *unbound_stat_calloc(size_t nmemb, size_t size); +void unbound_stat_free(void *ptr); +void *unbound_stat_realloc(void *ptr, size_t size); +void *unbound_stat_malloc_log(size_t size, const char* file, int line, +	const char* func); +void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file, +	int line, const char* func); +void unbound_stat_free_log(void *ptr, const char* file, int line, +	const char* func); +void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, +	int line, const char* func); +#elif defined(UNBOUND_ALLOC_LITE) +#  include "util/alloc.h" +#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */ + +/** default port for DNS traffic. */ +#define UNBOUND_DNS_PORT 53 +/** default port for unbound control traffic, registered port with IANA, +    ub-dns-control  8953/tcp    unbound dns nameserver control */ +#define UNBOUND_CONTROL_PORT 8953 +/** the version of unbound-control that this software implements */ +#define UNBOUND_CONTROL_VERSION 1 + +  | 
 Swift