diff --git a/libc/netbsd/net/getaddrinfo.c b/libc/netbsd/net/getaddrinfo.c index c4766e406..0d1949d15 100644 --- a/libc/netbsd/net/getaddrinfo.c +++ b/libc/netbsd/net/getaddrinfo.c @@ -1874,10 +1874,10 @@ static bool _using_default_dns(const char *iface) if (iface == NULL || *iface == '\0') return true; if_len = _resolv_get_default_iface(buf, sizeof(buf)); - if (if_len + 1 <= sizeof(buf)) { - if (strcmp(buf, iface) != 0) return false; + if (if_len != 0 && if_len + 1 <= sizeof(buf)) { + if (strcmp(buf, iface) == 0) return true; } - return true; + return false; } /*ARGSUSED*/ diff --git a/libc/netbsd/resolv/res_cache.c b/libc/netbsd/resolv/res_cache.c index 829bf1032..7e367adce 100644 --- a/libc/netbsd/resolv/res_cache.c +++ b/libc/netbsd/resolv/res_cache.c @@ -2426,18 +2426,16 @@ _resolv_get_default_iface(char* buff, int buffLen) ifname = _get_default_iface_locked(); // never null, but may be empty - // if default interface not set. Get first cache with an interface + // if default interface not set give up. if (ifname[0] == '\0') { - ifname = _find_any_iface_name_locked(); // may be null + pthread_mutex_unlock(&_res_cache_list_lock); + return 0; } - // if we got the default iface or if (no-default) the find_any call gave an answer - if (ifname) { - len = strlen(ifname); - if (len < buffLen) { - strncpy(buff, ifname, len); - buff[len] = '\0'; - } + len = strlen(ifname); + if (len < buffLen) { + strncpy(buff, ifname, len); + buff[len] = '\0'; } else { buff[0] = '\0'; }