mirror of
https://repo.or.cz/socat.git
synced 2024-12-22 15:32:35 +00:00
added struct sockaddr_ll to union sockaddr_union to avoid "strict aliasing"
This commit is contained in:
parent
9a7742bd90
commit
c8e1ef5286
4 changed files with 14 additions and 7 deletions
3
CHANGES
3
CHANGES
|
@ -15,6 +15,9 @@ corrections:
|
|||
Debian bug 531078: socat execs children with SIGCHLD ignored; corrected
|
||||
to default. Thanks to Martin Dorey for reporting this bug.
|
||||
|
||||
added struct sockaddr_ll to union sockaddr_union to avoid "strict
|
||||
aliasing" warnings (problem reported by Paul Wouters)
|
||||
|
||||
info message during socks connect showed bad port number on little
|
||||
endian systems due to wrong byte order (thanks to Peter M. Galbavy for
|
||||
bug report and patch)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* source: sysutils.h */
|
||||
/* Copyright Gerhard Rieger 2001-2008 */
|
||||
/* Copyright Gerhard Rieger 2001-2012 */
|
||||
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||
|
||||
#ifndef __sysutils_h_included
|
||||
|
@ -27,6 +27,10 @@ union sockaddr_union {
|
|||
#if _WITH_IP6
|
||||
struct sockaddr_in6 ip6;
|
||||
#endif /* _WITH_IP6 */
|
||||
#if WITH_INTERFACE
|
||||
struct sockaddr_ll ll;
|
||||
#endif
|
||||
|
||||
} ;
|
||||
#endif /* _WITH_SOCKET */
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* source: xio-interface.c */
|
||||
/* Copyright Gerhard Rieger 2008 */
|
||||
/* Copyright Gerhard Rieger 2008-2012 */
|
||||
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||
|
||||
/* this file contains the source for opening addresses of raw socket type */
|
||||
|
@ -65,9 +65,9 @@ int _xioopen_interface(const char *ifname,
|
|||
needbind = true;
|
||||
}
|
||||
/*!!! parse by ':' */
|
||||
((struct sockaddr_ll *)&us)->sll_family = pf;
|
||||
((struct sockaddr_ll *)&us)->sll_protocol = htons(ETH_P_ALL);
|
||||
((struct sockaddr_ll *)&us)->sll_ifindex = ifidx;
|
||||
us.ll.sll_family = pf;
|
||||
us.ll.sll_protocol = htons(ETH_P_ALL);
|
||||
us.ll.sll_ifindex = ifidx;
|
||||
uslen = sizeof(sall);
|
||||
needbind = true;
|
||||
xfd->peersa = (union sockaddr_union)us;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* source: xioread.c */
|
||||
/* Copyright Gerhard Rieger 2001-2009 */
|
||||
/* Copyright Gerhard Rieger 2001-2012 */
|
||||
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||
|
||||
/* this is the source of the extended read function */
|
||||
|
@ -178,7 +178,7 @@ ssize_t xioread(xiofile_t *file, void *buff, size_t bufsiz) {
|
|||
*/
|
||||
#if defined(PF_PACKET) && defined(PACKET_OUTGOING)
|
||||
if (from.soa.sa_family == PF_PACKET) {
|
||||
if ((((struct sockaddr_ll *)&from.soa)->sll_pkttype & PACKET_OUTGOING)
|
||||
if ((from.ll.sll_pkttype & PACKET_OUTGOING)
|
||||
== 0) {
|
||||
errno = EAGAIN; return -1;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue