summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pr/src/misc/prnetdb.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/pr/src/misc/prnetdb.c b/pr/src/misc/prnetdb.c
index 14076b08..1af39634 100644
--- a/pr/src/misc/prnetdb.c
+++ b/pr/src/misc/prnetdb.c
@@ -2186,7 +2186,7 @@ static PRStatus pr_StringToNetAddrGAI(const char *string, PRNetAddr *addr)
}
#endif /* _PR_HAVE_GETADDRINFO */
-#if !defined(_PR_HAVE_GETADDRINFO) || defined(_PR_INET6_PROBE)
+#if !defined(_PR_HAVE_GETADDRINFO) || defined(_PR_INET6_PROBE) || defined(DARWIN)
static PRStatus pr_StringToNetAddrFB(const char *string, PRNetAddr *addr)
{
PRStatus status = PR_SUCCESS;
@@ -2243,7 +2243,7 @@ static PRStatus pr_StringToNetAddrFB(const char *string, PRNetAddr *addr)
return status;
}
-#endif /* !_PR_HAVE_GETADDRINFO || _PR_INET6_PROBE */
+#endif /* !_PR_HAVE_GETADDRINFO || _PR_INET6_PROBE || DARWIN */
PR_IMPLEMENT(PRStatus) PR_StringToNetAddr(const char *string, PRNetAddr *addr)
{
@@ -2256,6 +2256,16 @@ PR_IMPLEMENT(PRStatus) PR_StringToNetAddr(const char *string, PRNetAddr *addr)
if (!_pr_ipv6_is_present)
return pr_StringToNetAddrFB(string, addr);
#endif
+#if defined(DARWIN)
+ /*
+ * On Mac OS X, getaddrinfo with AI_NUMERICHOST is slow.
+ * So we only use it to convert literal IP addresses that
+ * contain IPv6 scope IDs, which pr_StringToNetAddrFB
+ * cannot convert. (See bug 404399.)
+ */
+ if (!strchr(string, '%'))
+ return pr_StringToNetAddrFB(string, addr);
+#endif
return pr_StringToNetAddrGAI(string, addr);
#endif
}