diff --git a/ChangeLog b/ChangeLog index bfc9e891e9..61de09c5e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * nss/digits_dots.c: Don't pass NULL in h_aliases for successful lookup, pass pointer to array with NULL pointer [PR libc/1858]. + * inet/Makefile (tests): Add tst-gethnm. + * inet/tst-gethnm.c: New file. * rt/aio_cancel.c: If canceling a specific request which is running *really* do nothing. diff --git a/inet/Makefile b/inet/Makefile index c5874d4236..19009efc20 100644 --- a/inet/Makefile +++ b/inet/Makefile @@ -47,7 +47,8 @@ routines := htonl htons \ getaliasent_r getaliasent getaliasname getaliasname_r \ in6_addr getnameinfo if_index -tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network # tst-ipnode +tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \ + tst-gethnm # tst-ipnode include ../Rules diff --git a/inet/tst-gethnm.c b/inet/tst-gethnm.c new file mode 100644 index 0000000000..fe8e416de0 --- /dev/null +++ b/inet/tst-gethnm.c @@ -0,0 +1,63 @@ +/* Based on a test case by grd@algonet.se. */ + +#include +#include +#include +#include +#include +#include +#include +#include + +int +main (void) +{ + struct hostent *ent; + struct in_addr hostaddr; + int result = 0; + + inet_aton ("127.0.0.1", (struct in_addr *) &hostaddr.s_addr); + ent = gethostbyaddr (&hostaddr, sizeof (hostaddr), AF_INET); + if (ent == NULL) + puts ("gethostbyaddr (...) == NULL"); + else + { + puts ("Using gethostbyaddr(..):"); + printf ("h_name: %s\n", ent->h_name); + + if (ent->h_aliases == NULL) + puts ("ent->h_aliases == NULL"); + else + printf ("h_aliases[0]: %s\n", ent->h_aliases[0]); + } + + ent = gethostbyname ("127.0.0.1"); + if (ent == NULL) + { + puts ("gethostbyname (\"127.0.0.1\") == NULL"); + result = 1; + } + else + { + printf ("\nNow using gethostbyname(..):\n"); + printf ("h_name: %s\n", ent->h_name); + if (strcmp (ent->h_name, "127.0.0.1") != 0) + { + puts ("ent->h_name != \"127.0.0.1\""); + result = 1; + } + + if (ent->h_aliases == NULL) + { + puts ("ent->h_aliases == NULL"); + result = 1; + } + else + { + printf ("h_aliases[0]: %s\n", ent->h_aliases[0]); + result |= ent->h_aliases[0] != NULL; + } + } + + return result; +}