Commit 0576d587 authored by Bruno Haible's avatar Bruno Haible

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.
parent 9d916bc0
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'.
......@@ -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
......
# 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],
......
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
......@@ -2,6 +2,7 @@ Files:
tests/test-netdb.c
Depends-on:
netdb-c++-tests
configure.ac:
......
/* 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 ()
{
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment