summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwtchang%redhat.com <devnull@localhost>2005-03-10 01:53:04 +0000
committerwtchang%redhat.com <devnull@localhost>2005-03-10 01:53:04 +0000
commit9d7ea5d4a7808ccb55a820f12c48b5006a9b76e6 (patch)
treee78849de821ce1a1646f54cf0549a7f4c036ffda
parentff7bacc4343c4d41ac0f6d016ce84df3445b9565 (diff)
downloadnspr-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.c39
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