summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2011-04-30 15:00:45 +0200
committerBruno Haible <bruno@clisp.org>2011-04-30 15:00:45 +0200
commit0576d58775046f35e81c47b29fecad1daf516336 (patch)
tree52388ce6ae335387b108a828561e6b4d171295de
parent9d916bc07af4177e545d1a13aa3aadeaee03f6f6 (diff)
downloadgnulib-0576d58775046f35e81c47b29fecad1daf516336.tar.gz
netdb: Make it work in C++ mode.
* lib/netdb.in.h (struct addrinfo): In C++, define as a C struct. (getaddrinfo, freeaddrinfo, getnameinfo): Use macros from c++defs module. * m4/netdb_h.m4 (gl_NETDB_MODULE_INDICATOR): Invoke gl_MODULE_INDICATOR_FOR_TESTS. * modules/netdb-tests (Depends-on): Add netdb-c++-tests. * modules/netdb-c++-tests: New file. * tests/test-netdb-c++.cc: New file.
-rw-r--r--ChangeLog12
-rw-r--r--lib/netdb.in.h48
-rw-r--r--m4/netdb_h.m44
-rw-r--r--modules/netdb-c++-tests19
-rw-r--r--modules/netdb-tests1
-rw-r--r--tests/test-netdb-c++.cc42
6 files changed, 115 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 70a9b828f1..14b02e18d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2011-04-30 Bruno Haible <bruno@clisp.org>
+ netdb: Make it work in C++ mode.
+ * lib/netdb.in.h (struct addrinfo): In C++, define as a C struct.
+ (getaddrinfo, freeaddrinfo, getnameinfo): Use macros from c++defs
+ module.
+ * m4/netdb_h.m4 (gl_NETDB_MODULE_INDICATOR): Invoke
+ gl_MODULE_INDICATOR_FOR_TESTS.
+ * modules/netdb-tests (Depends-on): Add netdb-c++-tests.
+ * modules/netdb-c++-tests: New file.
+ * tests/test-netdb-c++.cc: New file.
+
+2011-04-30 Bruno Haible <bruno@clisp.org>
+
New modules 'vfscanf', 'vscanf'.
* modules/vfscanf: New file.
* modules/vscanf: New file.
diff --git a/lib/netdb.in.h b/lib/netdb.in.h
index 8d575c489c..028dfbed36 100644
--- a/lib/netdb.in.h
+++ b/lib/netdb.in.h
@@ -54,6 +54,10 @@
# if !@HAVE_STRUCT_ADDRINFO@
+# ifdef __cplusplus
+extern "C" {
+# endif
+
# if !GNULIB_defined_struct_addrinfo
/* Structure to contain information about address of a service provider. */
struct addrinfo
@@ -69,6 +73,11 @@ struct addrinfo
};
# define GNULIB_defined_struct_addrinfo 1
# endif
+
+# ifdef __cplusplus
+}
+# endif
+
# endif
/* Possible values for `ai_flags' field in `addrinfo' structure. */
@@ -155,19 +164,29 @@ struct addrinfo
socket addresses.
For more details, see the POSIX:2001 specification
<http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */
-extern int getaddrinfo (const char *restrict nodename,
- const char *restrict servname,
- const struct addrinfo *restrict hints,
- struct addrinfo **restrict res)
- _GL_ARG_NONNULL ((4));
+_GL_FUNCDECL_SYS (getaddrinfo, int,
+ (const char *restrict nodename,
+ const char *restrict servname,
+ const struct addrinfo *restrict hints,
+ struct addrinfo **restrict res)
+ _GL_ARG_NONNULL ((4)));
# endif
+_GL_CXXALIAS_SYS (getaddrinfo, int,
+ (const char *restrict nodename,
+ const char *restrict servname,
+ const struct addrinfo *restrict hints,
+ struct addrinfo **restrict res));
+_GL_CXXALIASWARN (getaddrinfo);
# if !@HAVE_DECL_FREEADDRINFO@
/* Free `addrinfo' structure AI including associated storage.
For more details, see the POSIX:2001 specification
<http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */
-extern void freeaddrinfo (struct addrinfo *ai) _GL_ARG_NONNULL ((1));
+_GL_FUNCDECL_SYS (freeaddrinfo, void, (struct addrinfo *ai)
+ _GL_ARG_NONNULL ((1)));
# endif
+_GL_CXXALIAS_SYS (freeaddrinfo, void, (struct addrinfo *ai));
+_GL_CXXALIASWARN (freeaddrinfo);
# if @REPLACE_GAI_STRERROR@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -191,12 +210,21 @@ _GL_CXXALIASWARN (gai_strerror);
/* Convert socket address to printable node and service names.
For more details, see the POSIX:2001 specification
<http://www.opengroup.org/susv3xsh/getnameinfo.html>. */
-extern int getnameinfo (const struct sockaddr *restrict sa, socklen_t salen,
+_GL_FUNCDECL_SYS (getnameinfo, int,
+ (const struct sockaddr *restrict sa, socklen_t salen,
+ char *restrict node, socklen_t nodelen,
+ char *restrict service, socklen_t servicelen,
+ int flags)
+ _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on glibc systems, the seventh parameter is
+ unsigned int flags. */
+_GL_CXXALIAS_SYS_CAST (getnameinfo, int,
+ (const struct sockaddr *restrict sa, socklen_t salen,
char *restrict node, socklen_t nodelen,
char *restrict service, socklen_t servicelen,
- int flags)
- _GL_ARG_NONNULL ((1));
-# endif
+ int flags));
+_GL_CXXALIASWARN (getnameinfo);
/* Possible flags for getnameinfo. */
# ifndef NI_NUMERICHOST
diff --git a/m4/netdb_h.m4 b/m4/netdb_h.m4
index 259c7a3181..a54d6701b7 100644
--- a/m4/netdb_h.m4
+++ b/m4/netdb_h.m4
@@ -1,4 +1,4 @@
-# netdb_h.m4 serial 10
+# netdb_h.m4 serial 11
dnl Copyright (C) 2008-2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -26,6 +26,8 @@ AC_DEFUN([gl_NETDB_MODULE_INDICATOR],
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
AC_REQUIRE([gl_NETDB_H_DEFAULTS])
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
AC_DEFUN([gl_NETDB_H_DEFAULTS],
diff --git a/modules/netdb-c++-tests b/modules/netdb-c++-tests
new file mode 100644
index 0000000000..af07dee341
--- /dev/null
+++ b/modules/netdb-c++-tests
@@ -0,0 +1,19 @@
+Files:
+tests/test-netdb-c++.cc
+tests/signature.h
+
+Status:
+c++-test
+
+Depends-on:
+ansi-c++-opt
+
+configure.ac:
+
+Makefile.am:
+if ANSICXX
+TESTS += test-netdb-c++
+check_PROGRAMS += test-netdb-c++
+test_netdb_c___SOURCES = test-netdb-c++.cc
+test_netdb_c___LDADD = $(LDADD) $(GETADDRINFO_LIB)
+endif
diff --git a/modules/netdb-tests b/modules/netdb-tests
index 1c3ae0b3e3..3590c94aaa 100644
--- a/modules/netdb-tests
+++ b/modules/netdb-tests
@@ -2,6 +2,7 @@ Files:
tests/test-netdb.c
Depends-on:
+netdb-c++-tests
configure.ac:
diff --git a/tests/test-netdb-c++.cc b/tests/test-netdb-c++.cc
new file mode 100644
index 0000000000..0dc47b9ae7
--- /dev/null
+++ b/tests/test-netdb-c++.cc
@@ -0,0 +1,42 @@
+/* Test of <netdb.h> substitute in C++ mode.
+ Copyright (C) 2011 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2011. */
+
+#define GNULIB_NAMESPACE gnulib
+#include <config.h>
+
+#include <netdb.h>
+
+#include "signature.h"
+
+
+#if GNULIB_TEST_GETADDRINFO
+SIGNATURE_CHECK (GNULIB_NAMESPACE::getaddrinfo, int,
+ (const char *, const char *, const struct addrinfo *,
+ struct addrinfo **));
+SIGNATURE_CHECK (GNULIB_NAMESPACE::freeaddrinfo, void, (struct addrinfo *));
+SIGNATURE_CHECK (GNULIB_NAMESPACE::gai_strerror, const char *, (int));
+SIGNATURE_CHECK (GNULIB_NAMESPACE::getnameinfo, int,
+ (const struct sockaddr *, socklen_t, char *, socklen_t,
+ char *, socklen_t, int));
+#endif
+
+
+int
+main ()
+{
+}