[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
netdb.h in C++ mode
From: |
Bruno Haible |
Subject: |
netdb.h in C++ mode |
Date: |
Sat, 30 Apr 2011 15:04:09 +0200 |
User-agent: |
KMail/1.9.9 |
Now that we have a function substitute in <netdb.h>, let me add a test of it
in C++ mode.
#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
However, this fails already on a glibc system:
test-netdb-c++.cc:28: error: 'getaddrinfo' is not a member of 'gnulib'
test-netdb-c++.cc:31: error: 'freeaddrinfo' is not a member of 'gnulib'
test-netdb-c++.cc:33: error: 'getnameinfo' is not a member of 'gnulib'
This patch fixes it. Tested on FreeBSD 6.4, OpenBSD 4.4, AIX 5.1, HP-UX 11.00,
IRIX 6.5, Solaris 7, OSF/1 5.1, Cygwin, mingw.
2011-04-30 Bruno Haible <address@hidden>
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.
=========================== modules/netdb-c++-tests ===========================
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
=========================== tests/test-netdb-c++.cc ===========================
/* 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 <address@hidden>, 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 ()
{
}
===============================================================================
--- lib/netdb.in.h.orig Sat Apr 30 14:56:02 2011
+++ lib/netdb.in.h Sat Apr 30 13:23:10 2011
@@ -54,6 +54,10 @@
# if address@hidden@
+# 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));
-# endif
+_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 address@hidden@
/* 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
--- m4/netdb_h.m4.orig Sat Apr 30 14:56:02 2011
+++ m4/netdb_h.m4 Sat Apr 30 13:23:10 2011
@@ -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],
--- modules/netdb-tests.orig Sat Apr 30 14:56:02 2011
+++ modules/netdb-tests Sat Apr 30 13:23:10 2011
@@ -2,6 +2,7 @@
tests/test-netdb.c
Depends-on:
+netdb-c++-tests
configure.ac:
--
In memoriam Casey Jones <http://en.wikipedia.org/wiki/Casey_Jones>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- netdb.h in C++ mode,
Bruno Haible <=