| 1 | --- avahi-core/socket.c.orig Thu Feb 9 20:45:09 2006 |
|---|
| 2 | +++ avahi-core/socket.c Mon Apr 24 17:14:18 2006 |
|---|
| 3 | @@ -468,7 +468,7 @@ int avahi_send_dns_packet_ipv4(int fd, A |
|---|
| 4 | size_t cmsg_data[( CMSG_SPACE(sizeof(struct in_pktinfo)) / sizeof(size_t)) + 1]; |
|---|
| 5 | #elif defined(IP_SENDSRCADDR) |
|---|
| 6 | struct cmsghdr *cmsg; |
|---|
| 7 | - size_t cmsg_data[( CMSG_SPACE(sizeof(struct in_addr)) / sizeof(size_t)) + 1]; |
|---|
| 8 | + uint8_t cmsg_data[CMSG_SPACE(sizeof(struct in_addr))]; |
|---|
| 9 | #endif |
|---|
| 10 | |
|---|
| 11 | assert(fd >= 0); |
|---|
| 12 | @@ -518,18 +518,17 @@ int avahi_send_dns_packet_ipv4(int fd, A |
|---|
| 13 | #elif defined(IP_SENDSRCADDR) |
|---|
| 14 | if (src_address) { |
|---|
| 15 | struct in_addr *addr; |
|---|
| 16 | + |
|---|
| 17 | + msg.msg_control = cmsg_data; |
|---|
| 18 | + msg.msg_controllen = sizeof(cmsg_data); |
|---|
| 19 | + cmsg = CMSG_FIRSTHDR(&msg); |
|---|
| 20 | |
|---|
| 21 | - memset(cmsg_data, 0, sizeof(cmsg_data)); |
|---|
| 22 | - cmsg = (struct cmsghdr*) cmsg_data; |
|---|
| 23 | cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_addr)); |
|---|
| 24 | cmsg->cmsg_level = IPPROTO_IP; |
|---|
| 25 | cmsg->cmsg_type = IP_SENDSRCADDR; |
|---|
| 26 | |
|---|
| 27 | addr = (struct in_addr *)CMSG_DATA(cmsg); |
|---|
| 28 | addr->s_addr = src_address->address; |
|---|
| 29 | - |
|---|
| 30 | - msg.msg_control = cmsg_data; |
|---|
| 31 | - msg.msg_controllen = sizeof(cmsg_data); |
|---|
| 32 | } |
|---|
| 33 | #elif defined(IP_MULTICAST_IF) |
|---|
| 34 | { |
|---|
| 35 | @@ -551,7 +550,7 @@ int avahi_send_dns_packet_ipv6(int fd, A |
|---|
| 36 | struct msghdr msg; |
|---|
| 37 | struct iovec io; |
|---|
| 38 | struct cmsghdr *cmsg; |
|---|
| 39 | - size_t cmsg_data[(CMSG_SPACE(sizeof(struct in6_pktinfo))/sizeof(size_t)) + 1]; |
|---|
| 40 | + uint8_t cmsg_data[CMSG_SPACE(sizeof(struct in6_pktinfo))]; |
|---|
| 41 | |
|---|
| 42 | assert(fd >= 0); |
|---|
| 43 | assert(p); |
|---|
| 44 | @@ -576,9 +575,11 @@ int avahi_send_dns_packet_ipv6(int fd, A |
|---|
| 45 | |
|---|
| 46 | if (interface > 0 || src_address) { |
|---|
| 47 | struct in6_pktinfo *pkti; |
|---|
| 48 | + |
|---|
| 49 | + msg.msg_control = cmsg_data; |
|---|
| 50 | + msg.msg_controllen = sizeof(cmsg_data); |
|---|
| 51 | + cmsg = CMSG_FIRSTHDR(&msg); |
|---|
| 52 | |
|---|
| 53 | - memset(cmsg_data, 0, sizeof(cmsg_data)); |
|---|
| 54 | - cmsg = (struct cmsghdr*) cmsg_data; |
|---|
| 55 | cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo)); |
|---|
| 56 | cmsg->cmsg_level = IPPROTO_IPV6; |
|---|
| 57 | cmsg->cmsg_type = IPV6_PKTINFO; |
|---|
| 58 | @@ -591,8 +592,6 @@ int avahi_send_dns_packet_ipv6(int fd, A |
|---|
| 59 | if (src_address) |
|---|
| 60 | memcpy(&pkti->ipi6_addr, src_address->address, sizeof(src_address->address)); |
|---|
| 61 | |
|---|
| 62 | - msg.msg_control = cmsg_data; |
|---|
| 63 | - msg.msg_controllen = sizeof(cmsg_data); |
|---|
| 64 | } else { |
|---|
| 65 | msg.msg_control = NULL; |
|---|
| 66 | msg.msg_controllen = 0; |
|---|