diff --git a/Modules/nics/nic.cpp b/Modules/nics/nic.cpp --- a/Modules/nics/nic.cpp +++ b/Modules/nics/nic.cpp @@ -47,10 +47,6 @@ #include #include -#ifndef HAVE_STRUCT_SOCKADDR_SA_LEN -#undef HAVE_GETNAMEINFO -#undef HAVE_GETIFADDRS -#endif #if defined(HAVE_GETNAMEINFO) && defined(HAVE_GETIFADDRS) #include @@ -110,7 +106,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; @@ -134,6 +130,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 + return getnameinfo(addr, ifa->ifa_addr->sa_len, buf, 127, 0, 0, NI_NUMERICHOST); +#else + return 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") ); @@ -166,7 +177,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; @@ -221,10 +232,10 @@ tmp->HWaddr = i18nc("Unknown HWaddr", "Unknown"); } - nl.append(tmp); + nl.append(tmp); break; - default: + default: break; } } @@ -235,22 +246,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; }