summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwtc%google.com <devnull@localhost>2007-12-19 02:32:28 +0000
committerwtc%google.com <devnull@localhost>2007-12-19 02:32:28 +0000
commit6abafbaeb48d9a4e77994c71b338120cda4ac581 (patch)
treeec5947047f6d71547da25a8e80d4dca0ffbe0de1
parent53fcd1eebc7c400b284b5cbe23d3dc5a7265d9aa (diff)
downloadnspr-hg-6abafbaeb48d9a4e77994c71b338120cda4ac581.tar.gz
Bugzilla bug 404399: getaddrinfo with AI_NUMERICHOST is slow on Mac OS XNSPR_HEAD_20071218
(10.4). So we only use it to convert IPv6 address strings with scope IDs. r=dwitte.
-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
}