diff options
author | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2009-09-05 01:10:23 +0000 |
---|---|---|
committer | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2009-09-05 01:10:23 +0000 |
commit | 0de430ddc29c8df052702ceced1e0744c626c2cd (patch) | |
tree | 56c158a7149518df27a85d36b36ca41a66e44ef1 | |
parent | 83ef92df2a822155ebaf33f9197b46be66ce2926 (diff) | |
download | flashrom-0de430ddc29c8df052702ceced1e0744c626c2cd.zip flashrom-0de430ddc29c8df052702ceced1e0744c626c2cd.tar.gz |
Fix strict aliasing in serprog
Initialize the sockaddr,sockaddr_in union directly instead of running
memset later.
Corresponding to flashrom svn r715.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
-rw-r--r-- | serprog.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -105,7 +105,7 @@ static int sp_opensocket(char *ip, unsigned int port) { int flag = 1; struct hostent *hostPtr = NULL; - struct sockaddr_in sp; + union { struct sockaddr_in si; struct sockaddr s; } sp = {}; int sock; printf_debug(MSGHEADER "IP %s port %d\n", ip, port); sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); @@ -117,11 +117,10 @@ static int sp_opensocket(char *ip, unsigned int port) if (NULL == hostPtr) sp_die("Error: cannot resolve"); } - memset(&sp, 0, sizeof(sp)); - sp.sin_family = AF_INET; - sp.sin_port = htons(port); - (void)memcpy(&sp.sin_addr, hostPtr->h_addr, hostPtr->h_length); - if (connect(sock, (struct sockaddr *)&sp, sizeof(sp)) < 0) { + sp.si.sin_family = AF_INET; + sp.si.sin_port = htons(port); + (void)memcpy(&sp.si.sin_addr, hostPtr->h_addr, hostPtr->h_length); + if (connect(sock, &sp.s, sizeof(sp.si)) < 0) { close(sock); sp_die("Error: serprog cannot connect"); } |