comparison libpurple/nat-pmp.c @ 23203:313b87adb730

A patch from Peter O'Gorman at The Written Word, Inc. to fix various portability issues. These changes seemed reasonable, even though I wasn't able to test or verify them all in particular. Hopefully we don't break anything on another OS. Refs #3798 committer: Richard Laager <rlaager@wiktel.com>
author Peter O'Gorman <pogma@thewrittenword.com>
date Tue, 27 May 2008 01:11:46 +0000
parents 8972581c2326
children b175f6441bba
comparison
equal deleted inserted replaced
23202:5197256f66b5 23203:313b87adb730
123 for (i = 0; i < RTAX_MAX; i++) 123 for (i = 0; i < RTAX_MAX; i++)
124 { 124 {
125 if (bitmask & (1 << i)) 125 if (bitmask & (1 << i))
126 { 126 {
127 addrs[i] = sa; 127 addrs[i] = sa;
128 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
128 sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + (char *)sa); 129 sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + (char *)sa);
130 #else
131 if (sa->sa_family == AF_INET)
132 sa = (struct sockaddr*)(sizeof(struct sockaddr_in) + (char *)sa);
133 #ifdef AF_INET6
134 else if (sa->sa_family == AF_INET6)
135 sa = (struct sockaddr*)(sizeof(struct sockaddr_in6) + (char *)sa);
136 #endif
137 #endif
129 } 138 }
130 else 139 else
131 { 140 {
132 addrs[i] = NULL; 141 addrs[i] = NULL;
133 } 142 }
144 153
145 sin = (struct sockaddr_in *)sa; 154 sin = (struct sockaddr_in *)sa;
146 if ((sin->sin_addr.s_addr == INADDR_ANY) && 155 if ((sin->sin_addr.s_addr == INADDR_ANY) &&
147 mask && 156 mask &&
148 (ntohl(((struct sockaddr_in *)mask)->sin_addr.s_addr) == 0L || 157 (ntohl(((struct sockaddr_in *)mask)->sin_addr.s_addr) == 0L ||
149 mask->sa_len == 0)) 158 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
159 mask->sa_len == 0
160 #else
161 0
162 #endif
163 ))
150 return 1; 164 return 1;
151 else 165 else
152 return 0; 166 return 0;
153 } 167 }
154 168