зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
c004f84f89
Коммит
2cafa2ea72
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче