From f0f508f3bfb1cd11491ff6b44a9cb6b3f30795c9 Mon Sep 17 00:00:00 2001 From: Jiri Popelka Date: Mar 26 2012 17:19:37 +0000 Subject: Another improvement of getifaddrs.patch --- diff --git a/dhcp-4.2.3-P2-getifaddrs.patch b/dhcp-4.2.3-P2-getifaddrs.patch index f84e9ab..b8a5048 100644 --- a/dhcp-4.2.3-P2-getifaddrs.patch +++ b/dhcp-4.2.3-P2-getifaddrs.patch @@ -406,14 +406,20 @@ diff -up dhcp-4.2.3-P2/common/discover.c.getifaddrs dhcp-4.2.3-P2/common/discove if (ifaces->next == NULL) { *err = 0; return 0; -@@ -825,8 +446,18 @@ next_iface(struct iface_info *info, int +@@ -825,8 +446,24 @@ next_iface(struct iface_info *info, int return 0; } strcpy(info->name, ifaces->next->ifa_name); - memcpy(&info->addr, ifaces->next->ifa_addr, - ifaces->next->ifa_addr->sa_len); + ++ memset(&info->addr, 0 , sizeof(info->addr)); ++ /* ++ * getifaddrs() can on Linux with some interfaces like PPP or TEQL ++ * result in a record with no address (ifa_addr). ++ */ + if (ifaces->next->ifa_addr != NULL) { ++/* Linux lacks the sa_len member in struct sockaddr. */ +#if defined(__linux) + if (ifaces->next->ifa_addr->sa_family == AF_INET) + sa_len = sizeof(struct sockaddr_in);