diff --git a/src/core/internal_network/network_interface.cpp b/src/core/internal_network/network_interface.cpp index 8505befa51..cb7b163f99 100644 --- a/src/core/internal_network/network_interface.cpp +++ b/src/core/internal_network/network_interface.cpp @@ -111,7 +111,7 @@ std::vector GetAvailableNetworkInterfaces() { #else std::vector GetAvailableNetworkInterfaces() { -#if defined(__ANDROID__) || defined(__linux__) +#if defined(__ANDROID__) || defined(__linux__) || defined(__APPLE__) struct ifaddrs* ifaddr = nullptr; if (getifaddrs(&ifaddr) != 0) { LOG_ERROR(Network, "getifaddrs: {}", std::strerror(errno)); @@ -126,8 +126,9 @@ std::vector GetAvailableNetworkInterfaces() { u32 flags; }; std::vector routes{}; -#ifdef __ANDROID__ +#if defined(__ANDROID__) || defined(__APPLE__) // Even through Linux based, we can't reliably obtain routing information from there :( + // macOS not Linux based and would murder us if we attempt to access /proc #else if (std::ifstream file("/proc/net/route"); file.is_open()) { file.ignore((std::numeric_limits::max)(), '\n'); //ignore header @@ -165,7 +166,7 @@ std::vector GetAvailableNetworkInterfaces() { } freeifaddrs(ifaddr); return ifaces; -#elif defined(__FreeBSD__) || defined(__APPLE__) +#elif defined(__FreeBSD__) std::vector ifaces; int fd = ::socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC); if (fd < 0) { @@ -206,9 +207,7 @@ std::vector GetAvailableNetworkInterfaces() { break; if (i == RTA_NETMASK && sa->sa_family == AF_LINK) { struct sockaddr_dl const* sdl = reinterpret_cast(sa); -#if defined(__APPLE__) - iface.name = std::string(sdl->sdl_data, sdl->sdl_nlen); -#elif defined(__FreeBSD__) && __FreeBSD__ < 15 +#if defined(__FreeBSD__) && __FreeBSD__ < 15 iface.name = std::string{::link_ntoa(sdl)}; #else size_t namelen = 0;