diff options
author | wtchang%redhat.com <devnull@localhost> | 2005-03-10 01:53:04 +0000 |
---|---|---|
committer | wtchang%redhat.com <devnull@localhost> | 2005-03-10 01:53:04 +0000 |
commit | 9d7ea5d4a7808ccb55a820f12c48b5006a9b76e6 (patch) | |
tree | e78849de821ce1a1646f54cf0549a7f4c036ffda | |
parent | ff7bacc4343c4d41ac0f6d016ce84df3445b9565 (diff) | |
download | nspr-hg-9d7ea5d4a7808ccb55a820f12c48b5006a9b76e6.tar.gz |
Bugzilla Bug 252195: use Microsoft IPv6 Technology Preview for Windows
2000 (wship6.dll), if available. r=darin.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
-rw-r--r-- | pr/src/misc/prnetdb.c | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/pr/src/misc/prnetdb.c b/pr/src/misc/prnetdb.c index 51ba201a..edccde85 100644 --- a/pr/src/misc/prnetdb.c +++ b/pr/src/misc/prnetdb.c @@ -1979,23 +1979,32 @@ _pr_find_getaddrinfo(void) PRLibrary *lib; #ifdef WIN32 /* - * On windows, we need to search ws2_32.dll for getaddrinfo and - * freeaddrinfo. This library might not be loaded yet. + * On windows, we need to search ws2_32.dll or wship6.dll + * (Microsoft IPv6 Technology Preview for Windows 2000) for + * getaddrinfo and freeaddrinfo. These libraries might not + * be loaded yet. */ - lib = PR_LoadLibrary("ws2_32.dll"); - if (!lib) { - return PR_FAILURE; - } - _pr_getaddrinfo = (FN_GETADDRINFO) - PR_FindFunctionSymbol(lib, GETADDRINFO_SYMBOL); - _pr_freeaddrinfo = (FN_FREEADDRINFO) - PR_FindFunctionSymbol(lib, FREEADDRINFO_SYMBOL); - if (!_pr_getaddrinfo || !_pr_freeaddrinfo) { - PR_UnloadLibrary(lib); - return PR_FAILURE; + const char *libname[] = { "ws2_32.dll", "wship6.dll" }; + int i; + + for (i = 0; i < sizeof(libname)/sizeof(libname[0]); i++) { + lib = PR_LoadLibrary(libname[i]); + if (!lib) { + continue; + } + _pr_getaddrinfo = (FN_GETADDRINFO) + PR_FindFunctionSymbol(lib, GETADDRINFO_SYMBOL); + if (!_pr_getaddrinfo) { + PR_UnloadLibrary(lib); + continue; + } + _pr_freeaddrinfo = (FN_FREEADDRINFO) + PR_FindFunctionSymbol(lib, FREEADDRINFO_SYMBOL); + PR_ASSERT(_pr_freeaddrinfo); + /* Keep the library loaded. */ + return PR_SUCCESS; } - /* Keep ws2_32.dll loaded. */ - return PR_SUCCESS; + return PR_FAILURE; #else /* * Resolve getaddrinfo by searching all loaded libraries. Then |