ntbtls-cli: Use union to access hostent addr.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 8 Nov 2018 21:21:25 +0000 (06:21 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 8 Nov 2018 21:21:25 +0000 (06:21 +0900)
* src/ntbtls-cli.c (connect_server): Use union.

--

Unfortunately, the API of gethostbyname was designed in old style of
C.  Modern compiler emits warnings for its access to h_addr of char *
on a machine of different alignment requirement for other
objects.  (It should be defined as void *, in new style.)

As a workaround, we use union here.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
src/ntbtls-cli.c

index 67affc1..555961b 100644 (file)
@@ -200,6 +200,10 @@ connect_server (const char *server, unsigned short port)
   int sock = -1;
   struct sockaddr_in addr;
   struct hostent *host;
+  union {
+    char *addr;
+    struct in_addr *in_addr;
+  } addru;
 
   addr.sin_family = AF_INET;
   addr.sin_port = htons (port);
@@ -211,7 +215,8 @@ connect_server (const char *server, unsigned short port)
       return -1;
     }
 
-  addr.sin_addr = *(struct in_addr*)host->h_addr;
+  addru.addr = host->h_addr;
+  addr.sin_addr = *addru.in_addr;
 
   sock = socket (AF_INET, SOCK_STREAM, 0);
   if (sock == -1)