Ticket #35: patch-avahi-core_socket.c

File patch-avahi-core_socket.c, 2.3 kB (added by marcus@…, 6 years ago)

Fix avahi on FreeBSD

Line 
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;