aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-08-30 11:49:40 -0700
committerMarcel Holtmann <marcel@holtmann.org>2009-08-30 11:49:40 -0700
commit013f769571e19d724c944fcb069d5767a29cfc04 (patch)
tree44b81de4531a2b3677c8200136afd2eccbf1f759
parent7aa01c59f981771b36b50b9a079fe0053dad643d (diff)
downloadbluez-hcidump-013f769571e19d724c944fcb069d5767a29cfc04.tar.gz
Fix some issues with strict-aliasing
-rw-r--r--src/hcidump.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/hcidump.c b/src/hcidump.c
index 4be914f..9dde2c3 100644
--- a/src/hcidump.c
+++ b/src/hcidump.c
@@ -305,10 +305,11 @@ static int process_frames(int dev, int sock, int fd, unsigned long flags)
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);
@@ -626,6 +627,8 @@ static int open_socket(int dev, unsigned long flags)
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;
@@ -657,13 +660,13 @@ static int open_connection(char *addr, char *port)
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;
}