diff --git a/Modules/nics/nic.cpp b/Modules/nics/nic.cpp --- a/Modules/nics/nic.cpp +++ b/Modules/nics/nic.cpp @@ -56,10 +56,6 @@ #include #include -#ifndef HAVE_STRUCT_SOCKADDR_SA_LEN -#undef HAVE_GETNAMEINFO -#undef HAVE_GETIFADDRS -#endif #if defined(HAVE_GETNAMEINFO) && defined(HAVE_GETIFADDRS) #include @@ -119,7 +115,7 @@ foreach(MyNIC* tmp, nics) { QStringList lst; - lst << tmp->name<addr<netmask<type<state<HWaddr; + lst << tmp->name<addr<netmask<type<state<HWaddr; new QTreeWidgetItem(m_list,lst); delete tmp; @@ -143,6 +139,21 @@ return ret; } +// Convenience wrapper around sa_len being available or not. +static int getNameInfo(struct sockaddr *addr, struct ifaddrs *ifa, char *hostOut) +{ +#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN + getnameinfo(addr, ifa->ifa_addr->sa_len, buf, 127, 0, 0, NI_NUMERICHOST); +#else + getnameinfo(addr, + (ifa->ifa_addr->sa_family == AF_INET) ? sizeof(struct sockaddr_in) : + sizeof(struct sockaddr_in6), + hostOut, NI_MAXHOST, + nullptr, 0, + NI_NUMERICHOST); +#endif +} + QList findNICs() { QString upMessage(i18nc("State of network card is connected", "Up") ); QString downMessage(i18nc("State of network card is disconnected", "Down") ); @@ -175,7 +186,7 @@ MyNIC *tmp=nullptr; switch (ifr->ifr_addr.sa_family) { case AF_INET: - sinptr = (struct sockaddr_in *) &ifr->ifr_addr; + sinptr = (struct sockaddr_in *) &ifr->ifr_addr; flags=0; struct ifreq ifcopy; @@ -230,10 +241,10 @@ tmp->HWaddr = i18nc("Unknown HWaddr", "Unknown"); } - nl.append(tmp); + nl.append(tmp); break; - default: + default: break; } } @@ -244,22 +255,22 @@ } MyNIC *tmp=0; - for (ifa = ifap; ifa; ifa = ifa->ifa_next) { - switch (ifa->ifa_addr->sa_family) { + for (ifa = ifap; ifa; ifa = ifa->ifa_next) { + switch (ifa->ifa_addr->sa_family) { case AF_INET6: case AF_INET: { tmp = new MyNIC; tmp->name = ifa->ifa_name; char buf[128]; bzero(buf, 128); - getnameinfo(ifa->ifa_addr, ifa->ifa_addr->sa_len, buf, 127, 0, 0, NI_NUMERICHOST); - tmp->addr = buf; + getNameInfo(ifa->ifa_addr, ifa, buf); + tmp->addr = buf; if (ifa->ifa_netmask != nullptr) { - bzero(buf, 128); - getnameinfo(ifa->ifa_netmask, ifa->ifa_netmask->sa_len, buf, 127, 0, 0, NI_NUMERICHOST); + bzero(buf, 128); + getNameInfo(ifa->ifa_netmask, ifa, buf); tmp->netmask = buf; }