diff --git a/tools/hcidump.c b/tools/hcidump.c
index 8e5f663..d6c8292 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
while (cmsg) {
switch (cmsg->cmsg_type) {
case HCI_CMSG_DIR:
- frm.in = *((int *) CMSG_DATA(cmsg));
+ memcpy(&frm.in, CMSG_DATA(cmsg), sizeof(int));
break;
case HCI_CMSG_TSTAMP:
- frm.ts = *((struct timeval *) CMSG_DATA(cmsg));
+ memcpy(&frm.ts, CMSG_DATA(cmsg),
+ sizeof(struct timeval));
break;
}
cmsg = CMSG_NXTHDR(&msg, cmsg);
static int open_connection(char *addr, char *port)
{
struct sockaddr_storage ss;
+ struct sockaddr_in *in = (struct sockaddr_in *) &ss;
+ struct sockaddr_in6 *in6 = (struct sockaddr_in6 *) &ss;
struct addrinfo hints, *res0, *res;
int sk = -1, opt = 1;
switch(ss.ss_family) {
case AF_INET:
- ((struct sockaddr_in *) &ss)->sin_addr.s_addr = htonl(INADDR_ANY);
- ((struct sockaddr_in *) &ss)->sin_port = 0;
+ in->sin_addr.s_addr = htonl(INADDR_ANY);
+ in->sin_port = 0;
break;
case AF_INET6:
- memcpy(&((struct sockaddr_in6 *) &ss)->sin6_addr,
- &in6addr_any, sizeof(in6addr_any));
- ((struct sockaddr_in6 *) &ss)->sin6_port = 0;
+ memcpy(&in6->sin6_addr, &in6addr_any,
+ sizeof(in6addr_any));
+ in6->sin6_port = 0;
break;
}