Mercurial > hg > octave-kai > gnulib-hg
changeset 14665:3ef0721f611e
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.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 30 Apr 2011 15:00:45 +0200 |
parents | cc7810c91628 |
children | b80300d0dc5e |
files | ChangeLog lib/netdb.in.h m4/netdb_h.m4 modules/netdb-c++-tests modules/netdb-tests tests/test-netdb-c++.cc |
diffstat | 6 files changed, 115 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +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'.
--- 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 @@ }; # define GNULIB_defined_struct_addrinfo 1 # endif + +# ifdef __cplusplus +} +# endif + # endif /* Possible values for `ai_flags' field in `addrinfo' structure. */ @@ -155,19 +164,29 @@ 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 @@ /* 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
--- 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 @@ 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],
new file mode 100644 --- /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
--- a/modules/netdb-tests +++ b/modules/netdb-tests @@ -2,6 +2,7 @@ tests/test-netdb.c Depends-on: +netdb-c++-tests configure.ac:
new file mode 100644 --- /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 () +{ +}