mirror of
https://repo.or.cz/socat.git
synced 2025-01-08 22:12:33 +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
|
Debian bug 531078: socat execs children with SIGCHLD ignored; corrected
|
||||||
to default. Thanks to Martin Dorey for reporting this bug.
|
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
|
info message during socks connect showed bad port number on little
|
||||||
endian systems due to wrong byte order (thanks to Peter M. Galbavy for
|
endian systems due to wrong byte order (thanks to Peter M. Galbavy for
|
||||||
bug report and patch)
|
bug report and patch)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* source: sysutils.h */
|
/* 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 */
|
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||||
|
|
||||||
#ifndef __sysutils_h_included
|
#ifndef __sysutils_h_included
|
||||||
|
@ -27,6 +27,10 @@ union sockaddr_union {
|
||||||
#if _WITH_IP6
|
#if _WITH_IP6
|
||||||
struct sockaddr_in6 ip6;
|
struct sockaddr_in6 ip6;
|
||||||
#endif /* _WITH_IP6 */
|
#endif /* _WITH_IP6 */
|
||||||
|
#if WITH_INTERFACE
|
||||||
|
struct sockaddr_ll ll;
|
||||||
|
#endif
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
#endif /* _WITH_SOCKET */
|
#endif /* _WITH_SOCKET */
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* source: xio-interface.c */
|
/* 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 */
|
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||||
|
|
||||||
/* this file contains the source for opening addresses of raw socket type */
|
/* this file contains the source for opening addresses of raw socket type */
|
||||||
|
@ -65,9 +65,9 @@ int _xioopen_interface(const char *ifname,
|
||||||
needbind = true;
|
needbind = true;
|
||||||
}
|
}
|
||||||
/*!!! parse by ':' */
|
/*!!! parse by ':' */
|
||||||
((struct sockaddr_ll *)&us)->sll_family = pf;
|
us.ll.sll_family = pf;
|
||||||
((struct sockaddr_ll *)&us)->sll_protocol = htons(ETH_P_ALL);
|
us.ll.sll_protocol = htons(ETH_P_ALL);
|
||||||
((struct sockaddr_ll *)&us)->sll_ifindex = ifidx;
|
us.ll.sll_ifindex = ifidx;
|
||||||
uslen = sizeof(sall);
|
uslen = sizeof(sall);
|
||||||
needbind = true;
|
needbind = true;
|
||||||
xfd->peersa = (union sockaddr_union)us;
|
xfd->peersa = (union sockaddr_union)us;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* source: xioread.c */
|
/* 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 */
|
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||||
|
|
||||||
/* this is the source of the extended read function */
|
/* 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 defined(PF_PACKET) && defined(PACKET_OUTGOING)
|
||||||
if (from.soa.sa_family == PF_PACKET) {
|
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) {
|
== 0) {
|
||||||
errno = EAGAIN; return -1;
|
errno = EAGAIN; return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue