X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a018a119bdcd0fd3d2ba8161c9db3e9b1c6319ff..accbb1e75890c115105210e9cb838909aa0e8114:/src/common/dynlib.cpp diff --git a/src/common/dynlib.cpp b/src/common/dynlib.cpp index e2d60444ec..c2adec7818 100644 --- a/src/common/dynlib.cpp +++ b/src/common/dynlib.cpp @@ -99,22 +99,28 @@ const char *dlerror() void *dlopen(const char *path, int WXUNUSED(mode) /* mode is ignored */) { - int dyld_result; NSObjectFileImage ofile; NSModule handle = NULL; - dyld_result = NSCreateObjectFileImageFromFile(path, &ofile); - if (dyld_result != NSObjectFileImageSuccess) + int dyld_result = NSCreateObjectFileImageFromFile(path, &ofile); + if ( dyld_result != NSObjectFileImageSuccess ) { - TranslateError(path, dyld_result); + handle = NULL; } else { - // NSLinkModule will cause the run to abort on any link error's - // not very friendly but the error recovery functionality is limited. - handle = NSLinkModule(ofile, path, NSLINKMODULE_OPTION_BINDNOW); + handle = NSLinkModule + ( + ofile, + path, + NSLINKMODULE_OPTION_BINDNOW | + NSLINKMODULE_OPTION_RETURN_ON_ERROR + ); } + if ( !handle ) + TranslateError(path, dyld_result); + return handle; } @@ -129,8 +135,12 @@ void *dlsym(void *handle, const char *symbol) // as on many other systems, C symbols have prepended underscores under // Darwin but unlike the normal dlopen(), NSLookupSymbolInModule() is not // aware of this - NSSymbol nsSymbol = NSLookupSymbolInModule( handle, - wxString(_T('_')) + symbol ); + wxCharBuffer buf(strlen(symbol) + 1); + char *p = buf.data(); + p[0] = '_'; + strcpy(p + 1, symbol); + + NSSymbol nsSymbol = NSLookupSymbolInModule( handle, p ); return nsSymbol ? NSAddressOfSymbol(nsSymbol) : NULL; }