Bug 191270: passed the XXX_RETURN_ON_ERROR flags to several Mac OS X

linker functions.  Correctly handle the return value of NSUnLinkModule.
Pass NSADDIMAGE_OPTION_WITH_SEARCHING to NSAddImage.
cvs: ----------------------------------------------------------------------
This commit is contained in:
wtc%netscape.com 2003-02-26 01:57:16 +00:00
Родитель c004f84f89
Коммит 2cafa2ea72
1 изменённых файлов: 22 добавлений и 5 удалений

Просмотреть файл

@ -642,7 +642,18 @@ pr_LoadMachDyldModule(const char *name)
NSModule h = NULL;
if (NSCreateObjectFileImageFromFile(name, &ofi)
== NSObjectFileImageSuccess) {
h = NSLinkModule(ofi, name, NSLINKMODULE_OPTION_PRIVATE);
h = NSLinkModule(ofi, name, NSLINKMODULE_OPTION_PRIVATE
| NSLINKMODULE_OPTION_RETURN_ON_ERROR);
/*
* TODO: If NSLinkModule fails, use NSLinkEditError to retrieve
* error information.
*/
if (NSDestroyObjectFileImage(ofi) == FALSE) {
if (h) {
(void)NSUnLinkModule(h, NSUNLINKMODULE_OPTION_NONE);
h = NULL;
}
}
}
return h;
}
@ -881,7 +892,12 @@ pr_LoadViaDyld(const char *name, PRLibrary *lm)
{
lm->dlh = pr_LoadMachDyldModule(name);
if (lm->dlh == NULL) {
lm->image = NSAddImage(name, NSADDIMAGE_OPTION_NONE);
lm->image = NSAddImage(name, NSADDIMAGE_OPTION_RETURN_ON_ERROR
| NSADDIMAGE_OPTION_WITH_SEARCHING);
/*
* TODO: If NSAddImage fails, use NSLinkEditError to retrieve
* error information.
*/
}
return (lm->dlh != NULL || lm->image != NULL) ? PR_SUCCESS : PR_FAILURE;
}
@ -1337,7 +1353,7 @@ PR_UnloadLibrary(PRLibrary *lib)
#elif defined(USE_HPSHL)
result = shl_unload(lib->dlh);
#elif defined(USE_MACH_DYLD)
result = NSUnLinkModule(lib->dlh, NSUNLINKMODULE_OPTION_NONE);
result = NSUnLinkModule(lib->dlh, NSUNLINKMODULE_OPTION_NONE) ? 0 : -1;
#else
#error Configuration error
#endif
@ -1399,7 +1415,7 @@ PR_UnloadLibrary(PRLibrary *lib)
free(lib->name);
lib->name = NULL;
PR_DELETE(lib);
if (result == -1) {
if (result != 0) {
PR_SetError(PR_UNLOAD_LIBRARY_ERROR, _MD_ERRNO());
DLLErrorInternal(_MD_ERRNO());
status = PR_FAILURE;
@ -1483,7 +1499,8 @@ pr_FindSymbolInLib(PRLibrary *lm, const char *name)
if (lm->image) {
NSSymbol symbol;
symbol = NSLookupSymbolInImage(lm->image, name,
NSLOOKUPSYMBOLINIMAGE_OPTION_BIND);
NSLOOKUPSYMBOLINIMAGE_OPTION_BIND
| NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
if (symbol != NULL)
f = NSAddressOfSymbol(symbol);
else