1
0
Fork 0

(svn r12017) -Fix: when you have more than 9 network interfaces you'll enter the wonderfull world of overflows.

release/0.6
rubidium 2008-01-29 21:43:22 +00:00
parent be6737a2db
commit 44f4ebffed
1 changed files with 4 additions and 0 deletions

View File

@ -404,6 +404,7 @@ static void NetworkFindIPs()
inaddr.s_addr = htonl(ip | ~netmask); inaddr.s_addr = htonl(ip | ~netmask);
_broadcast_list[i] = inaddr.s_addr; _broadcast_list[i] = inaddr.s_addr;
i++; i++;
if (i == MAX_INTERFACES) break;
} }
if (read < 0) { if (read < 0) {
break; break;
@ -431,6 +432,7 @@ static void NetworkFindIPs()
if (ifa->ifa_broadaddr->sa_family != AF_INET) continue; if (ifa->ifa_broadaddr->sa_family != AF_INET) continue;
_broadcast_list[i] = ((struct sockaddr_in*)ifa->ifa_broadaddr)->sin_addr.s_addr; _broadcast_list[i] = ((struct sockaddr_in*)ifa->ifa_broadaddr)->sin_addr.s_addr;
i++; i++;
if (i == MAX_INTERFACES) break;
} }
freeifaddrs(ifap); freeifaddrs(ifap);
@ -470,6 +472,7 @@ static void NetworkFindIPs()
_broadcast_list[i++] = _broadcast_list[i++] =
ifo[j].iiAddress.AddressIn.sin_addr.s_addr | ifo[j].iiAddress.AddressIn.sin_addr.s_addr |
~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr; ~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr;
if (i == MAX_INTERFACES) break;
} }
#else #else
ifconf.ifc_len = sizeof(buf); ifconf.ifc_len = sizeof(buf);
@ -493,6 +496,7 @@ static void NetworkFindIPs()
ioctl(sock, SIOCGIFBRDADDR, &r) != -1) { ioctl(sock, SIOCGIFBRDADDR, &r) != -1) {
_broadcast_list[i++] = _broadcast_list[i++] =
((struct sockaddr_in*)&r.ifr_broadaddr)->sin_addr.s_addr; ((struct sockaddr_in*)&r.ifr_broadaddr)->sin_addr.s_addr;
if (i == MAX_INTERFACES) break;
} }
} }