Bug 191270: added the ability to load a dynamic shared library (.dylib) on

Mac OS X.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH


git-svn-id: svn://10.0.0.236/branches/NSPRPUB_PRE_4_2_CLIENT_BRANCH@138247 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
wtc%netscape.com
2003-02-23 00:30:35 +00:00
parent 634c38511a
commit 3c53b48888

View File

@@ -134,6 +134,7 @@ struct PRLibrary {
#if defined(XP_MACOSX)
CFMutableDictionaryRef wrappers;
const struct mach_header* image;
#endif /* XP_MACOSX */
#endif
@@ -815,7 +816,10 @@ static PRStatus
pr_LoadViaDyld(const char *name, PRLibrary *lm)
{
lm->dlh = pr_LoadMachDyldModule(name);
return (lm->dlh != NULL) ? PR_SUCCESS : PR_FAILURE;
if (lm->dlh == NULL) {
lm->image = NSAddImage(name, NSADDIMAGE_OPTION_NONE);
}
return (lm->dlh != NULL || lm->image != NULL) ? PR_SUCCESS : PR_FAILURE;
}
#endif
@@ -1269,7 +1273,7 @@ PR_UnloadLibrary(PRLibrary *lib)
#elif defined(USE_HPSHL)
result = shl_unload(lib->dlh);
#elif defined(USE_MACH_DYLD)
result = NSUnLinkModule(lib->dlh, FALSE);
result = NSUnLinkModule(lib->dlh, NSUNLINKMODULE_OPTION_NONE);
#else
#error Configuration error
#endif
@@ -1293,6 +1297,7 @@ PR_UnloadLibrary(PRLibrary *lib)
#if defined(XP_MACOSX)
if (lib->wrappers)
CFRelease(lib->wrappers);
/* No way to unload an image (lib->image) */
#endif
#endif
@@ -1410,6 +1415,17 @@ pr_FindSymbolInLib(PRLibrary *lm, const char *name)
if (f == NULL && strcmp(name + SYM_OFFSET, "main") == 0) f = lm->main;
}
#if defined(XP_MACOSX)
if (lm->image) {
NSSymbol symbol;
symbol = NSLookupSymbolInImage(lm->image, name,
NSLOOKUPSYMBOLINIMAGE_OPTION_BIND);
if (symbol != NULL)
f = NSAddressOfSymbol(symbol);
else
f = NULL;
}
#endif
#undef SYM_OFFSET
#endif /* XP_MAC */