X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/337b24541e44b13deb722b42e3c8a80e229ab94e..33980f0da63a5c78e88df40d39b010fbe33d867a:/src/common/dynlib.cpp?ds=sidebyside diff --git a/src/common/dynlib.cpp b/src/common/dynlib.cpp index 6dd93ebcdc..91981e3061 100644 --- a/src/common/dynlib.cpp +++ b/src/common/dynlib.cpp @@ -416,25 +416,21 @@ wxObject *wxLibraries::CreateObject(const wxString& path) return NULL; } -#ifdef __DARWIN__ +#endif // wxUSE_DYNLIB_CLASS && !wxUSE_DYNAMIC_LOADER + +#if defined(__DARWIN__) && (wxUSE_DYNLIB_CLASS || wxUSE_DYNAMIC_LOADER) // --------------------------------------------------------------------------- // For Darwin/Mac OS X // supply the sun style dlopen functions in terms of Darwin NS* // --------------------------------------------------------------------------- -extern "C" { -#import -}; - -enum dyldErrorSource -{ - OFImage, -}; +#include +#include static char dl_last_error[1024]; static -void TranslateError(const char *path, enum dyldErrorSource type, int number) +void TranslateError(const char *path, int number) { unsigned int index; static char *OFIErrorStrings[] = @@ -449,21 +445,11 @@ void TranslateError(const char *path, enum dyldErrorSource type, int number) }; #define NUM_OFI_ERRORS (sizeof(OFIErrorStrings) / sizeof(OFIErrorStrings[0])) - switch (type) - { - case OFImage: - index = number; - if (index > NUM_OFI_ERRORS - 1) { - index = NUM_OFI_ERRORS - 1; - } - sprintf(dl_last_error, OFIErrorStrings[index], path, number); - break; - - default: - sprintf(dl_last_error, "%s(%d): Totally unknown error type %d\n", - path, number, type); - break; + index = number; + if (index > NUM_OFI_ERRORS - 1) { + index = NUM_OFI_ERRORS - 1; } + sprintf(dl_last_error, OFIErrorStrings[index], path, number); } const char *dlerror() @@ -480,20 +466,21 @@ void *dlopen(const char *path, int mode /* mode is ignored */) dyld_result = NSCreateObjectFileImageFromFile(path, &ofile); if (dyld_result != NSObjectFileImageSuccess) { - TranslateError(path, OFImage, dyld_result); + TranslateError(path, dyld_result); } 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, TRUE); + handle = NSLinkModule(ofile, path, NSLINKMODULE_OPTION_BINDNOW); } return handle; } -int dlclose(void *handle) /* stub only */ +int dlclose(void *handle) { + NSUnLinkModule( handle, NSUNLINKMODULE_OPTION_NONE); return 0; } @@ -510,6 +497,4 @@ void *dlsym(void *handle, const char *symbol) return addr; } -#endif // __DARWIN__ - -#endif // wxUSE_DYNLIB_CLASS +#endif // defined(__DARWIN__) && (wxUSE_DYNLIB_CLASS || wxUSE_DYNAMIC_LOADER)