diff options
author | wtc%google.com <devnull@localhost> | 2007-12-19 02:32:28 +0000 |
---|---|---|
committer | wtc%google.com <devnull@localhost> | 2007-12-19 02:32:28 +0000 |
commit | 6abafbaeb48d9a4e77994c71b338120cda4ac581 (patch) | |
tree | ec5947047f6d71547da25a8e80d4dca0ffbe0de1 | |
parent | 53fcd1eebc7c400b284b5cbe23d3dc5a7265d9aa (diff) | |
download | nspr-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.c | 14 |
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 } |