aboutsummaryrefslogtreecommitdiff
path: root/ares
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2006-07-28 14:19:02 +0000
committerYang Tse <yangsita@gmail.com>2006-07-28 14:19:02 +0000
commit77b3bc239daf75d9fb7702ee34c8e5871c47d387 (patch)
treedd95de134f25ea8196884c454d1f13dbabfc6863 /ares
parentc10d15aa0fe332f98fb4eac34328034a0de03095 (diff)
First step trying to avoid the multiple header inclusion and recursion nightmare.
Reintroduce checking for HAVE_MSG_NOSIGNAL in configure script, so that we don't depend on header inclusion order for a valid check.
Diffstat (limited to 'ares')
-rw-r--r--ares/Makefile.inc3
-rw-r--r--ares/acinclude.m433
-rw-r--r--ares/configure.ac2
-rw-r--r--ares/setup.h8
-rw-r--r--ares/setup_once.h99
5 files changed, 144 insertions, 1 deletions
diff --git a/ares/Makefile.inc b/ares/Makefile.inc
index c90aae4b7..29b6447a7 100644
--- a/ares/Makefile.inc
+++ b/ares/Makefile.inc
@@ -8,7 +8,8 @@ ares_expand_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c \
ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h \
- nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h
+ nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h \
+ setup_once.h
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
diff --git a/ares/acinclude.m4 b/ares/acinclude.m4
index a282bb0a2..aa87cba60 100644
--- a/ares/acinclude.m4
+++ b/ares/acinclude.m4
@@ -904,6 +904,39 @@ AC_DEFUN([CURL_CHECK_FUNC_SEND], [
]) # AC_DEFUN
+dnl CURL_CHECK_MSG_NOSIGNAL
+dnl -------------------------------------------------
+dnl Check for MSG_NOSIGNAL
+
+AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
+ AC_CHECK_HEADERS(sys/types.h sys/socket.h)
+ AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+ ],[
+ int flag=MSG_NOSIGNAL;
+ ])
+ ],[
+ ac_cv_msg_nosignal="yes"
+ ],[
+ ac_cv_msg_nosignal="no"
+ ])
+ ])
+ case "$ac_cv_msg_nosignal" in
+ yes)
+ AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1,
+ [Define to 1 if you have the MSG_NOSIGNAL flag.])
+ ;;
+ esac
+]) # AC_DEFUN
+
+
dnl CURL_CHECK_NONBLOCKING_SOCKET
dnl -------------------------------------------------
dnl Check for how to set a socket to non-blocking state. There seems to exist
diff --git a/ares/configure.ac b/ares/configure.ac
index b331c3361..e2867d10f 100644
--- a/ares/configure.ac
+++ b/ares/configure.ac
@@ -179,6 +179,8 @@ CURL_CHECK_FUNC_RECV
CURL_CHECK_FUNC_SEND
+CURL_CHECK_MSG_NOSIGNAL
+
dnl check for AF_INET6
CARES_CHECK_CONSTANT(
[
diff --git a/ares/setup.h b/ares/setup.h
index 731e66f07..f3ced3ed8 100644
--- a/ares/setup.h
+++ b/ares/setup.h
@@ -149,4 +149,12 @@ int ares_strcasecmp(const char *s1, const char *s2);
#endif
#endif
+/*
+ * Include macros and defines that should only be processed once.
+ */
+
+#ifndef __SETUP_ONCE_H
+#include "setup_once.h"
+#endif
+
#endif /* __ARES_SETUP_H */
diff --git a/ares/setup_once.h b/ares/setup_once.h
new file mode 100644
index 000000000..065a0888e
--- /dev/null
+++ b/ares/setup_once.h
@@ -0,0 +1,99 @@
+#ifndef __SETUP_ONCE_H
+#define __SETUP_ONCE_H
+
+/* $Id$ */
+
+/* Copyright (C) 2004 - 2006 by Daniel Stenberg et al
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. M.I.T. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ */
+
+
+/*
+ * If we have the MSG_NOSIGNAL define, make sure we use
+ * it as the fourth argument of send() and recv()
+ */
+
+#ifdef HAVE_MSG_NOSIGNAL
+#define SEND_4TH_ARG MSG_NOSIGNAL
+#else
+#define SEND_4TH_ARG 0
+#endif
+
+
+/*
+ * The definitions for the return type and arguments types
+ * of functions recv() and send() belong and come from the
+ * configuration file. Do not define them in any other place.
+ *
+ * HAVE_RECV is defined if you have a function named recv()
+ * which is used to read incoming data from sockets. If your
+ * function has another name then don't define HAVE_RECV.
+ *
+ * If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2,
+ * RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also
+ * be defined.
+ *
+ * HAVE_SEND is defined if you have a function named send()
+ * which is used to write outgoing data on a connected socket.
+ * If yours has another name then don't define HAVE_SEND.
+ *
+ * If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2,
+ * SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and
+ * SEND_TYPE_RETV must also be defined.
+ */
+
+#ifdef HAVE_RECV
+#if !defined(RECV_TYPE_ARG1) || \
+ !defined(RECV_TYPE_ARG2) || \
+ !defined(RECV_TYPE_ARG3) || \
+ !defined(RECV_TYPE_ARG4) || \
+ !defined(RECV_TYPE_RETV)
+ /* */
+ Error Missing_definition_of_return_and_arguments_types_of_recv
+ /* */
+#else
+#define sread(x,y,z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \
+ (RECV_TYPE_ARG2)(y), \
+ (RECV_TYPE_ARG3)(z), \
+ (RECV_TYPE_ARG4)(SEND_4TH_ARG))
+#endif
+#else /* HAVE_RECV */
+#ifdef DJGPP
+#define sread(x,y,z) (ssize_t)read_s((int)(x), (char *)(y), (int)(z))
+#endif
+#endif /* HAVE_RECV */
+
+#ifdef HAVE_SEND
+#if !defined(SEND_TYPE_ARG1) || \
+ !defined(SEND_QUAL_ARG2) || \
+ !defined(SEND_TYPE_ARG2) || \
+ !defined(SEND_TYPE_ARG3) || \
+ !defined(SEND_TYPE_ARG4) || \
+ !defined(SEND_TYPE_RETV)
+ /* */
+ Error Missing_definition_of_return_and_arguments_types_of_send
+ /* */
+#else
+#define swrite(x,y,z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
+ (SEND_TYPE_ARG2)(y), \
+ (SEND_TYPE_ARG3)(z), \
+ (SEND_TYPE_ARG4)(SEND_4TH_ARG))
+#endif
+#else /* HAVE_SEND */
+#ifdef DJGPP
+#define swrite(x,y,z) (ssize_t)write_s((int)(x), (char *)(y), (int)(z))
+#endif
+#endif /* HAVE_SEND */
+
+
+#endif /* __SETUP_ONCE_H */
+