1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00
samba-mirror/lib/replace/tests/getifaddrs.c
Andrew Bartlett 6cc68c1ccf replace: Fix "make test" to actually test libreplace
Found by Joe Guo during preperation for automated code coverage output.

In order to allow the Makefile wrapper to work we need to rename the
test directory to tests.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
2019-05-06 05:46:11 +00:00

106 lines
2.5 KiB
C

/*
* Unix SMB/CIFS implementation.
*
* libreplace getifaddrs test
*
* Copyright (C) Michael Adam <obnox@samba.org> 2008
*
* ** NOTE! The following LGPL license applies to the replace
* ** library. This does NOT imply that all of Samba is released
* ** under the LGPL
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef AUTOCONF_TEST
#include "replace.h"
#include "system/network.h"
#include "replace-test.h"
#endif
#ifdef HAVE_INET_NTOP
#define rep_inet_ntop inet_ntop
#endif
static const char *format_sockaddr(struct sockaddr *addr,
char *addrstring,
socklen_t addrlen)
{
const char *result = NULL;
if (addr->sa_family == AF_INET) {
result = rep_inet_ntop(AF_INET,
&((struct sockaddr_in *)addr)->sin_addr,
addrstring,
addrlen);
#ifdef HAVE_STRUCT_SOCKADDR_IN6
} else if (addr->sa_family == AF_INET6) {
result = rep_inet_ntop(AF_INET6,
&((struct sockaddr_in6 *)addr)->sin6_addr,
addrstring,
addrlen);
#endif
}
return result;
}
int getifaddrs_test(void)
{
struct ifaddrs *ifs = NULL;
struct ifaddrs *ifs_head = NULL;
int ret;
ret = getifaddrs(&ifs);
ifs_head = ifs;
if (ret != 0) {
fprintf(stderr, "getifaddrs() failed: %s\n", strerror(errno));
return 1;
}
while (ifs) {
printf("%-10s ", ifs->ifa_name);
if (ifs->ifa_addr != NULL) {
char addrstring[INET6_ADDRSTRLEN];
const char *result;
result = format_sockaddr(ifs->ifa_addr,
addrstring,
sizeof(addrstring));
if (result != NULL) {
printf("IP=%s ", addrstring);
}
if (ifs->ifa_netmask != NULL) {
result = format_sockaddr(ifs->ifa_netmask,
addrstring,
sizeof(addrstring));
if (result != NULL) {
printf("NETMASK=%s", addrstring);
}
} else {
printf("AF=%d ", ifs->ifa_addr->sa_family);
}
} else {
printf("<no address>");
}
printf("\n");
ifs = ifs->ifa_next;
}
freeifaddrs(ifs_head);
return 0;
}