Differences From Artifact [565f8364c6]:
- File
src/OFPlugin.m
— part of check-in
[81970b1dab]
at
2016-07-10 22:40:36
on branch trunk
— Add of_dl{open,sym,close}
It only makes sense to export the lowlevel variants as well. (user: js, size: 2351) [annotate] [blame] [check-ins using]
To Artifact [50477690f4]:
- File src/OFPlugin.m — part of check-in [c91508ddfb] at 2016-07-11 19:04:29 on branch trunk — Windows improvements for of_dl{open,sym,close} (user: js, size: 2423) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | of_plugin_handle_t of_dlopen(OFString *path, int flags) { #ifndef OF_WINDOWS return dlopen([path cStringWithEncoding: [OFSystemInfo native8BitEncoding]], flags); #else return LoadLibraryW([path UTF16String]); #endif } void* of_dlsym(of_plugin_handle_t handle, const char *symbol) { #ifndef OF_WINDOWS return dlsym(handle, symbol); #else | > > > | | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | of_plugin_handle_t of_dlopen(OFString *path, int flags) { #ifndef OF_WINDOWS return dlopen([path cStringWithEncoding: [OFSystemInfo native8BitEncoding]], flags); #else if (path == nil) return GetModuleHandle(NULL); return LoadLibraryW([path UTF16String]); #endif } void* of_dlsym(of_plugin_handle_t handle, const char *symbol) { #ifndef OF_WINDOWS return dlsym(handle, symbol); #else return (void*)(uintptr_t)GetProcAddress(handle, symbol); #endif } void of_dlclose(of_plugin_handle_t handle) { #ifndef OF_WINDOWS |
︙ | ︙ | |||
68 69 70 71 72 73 74 | void *pool = objc_autoreleasePoolPush(); of_plugin_handle_t handle; init_plugin_t initPlugin; OFPlugin *plugin; path = [path stringByAppendingString: @PLUGIN_SUFFIX]; | | | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | void *pool = objc_autoreleasePoolPush(); of_plugin_handle_t handle; init_plugin_t initPlugin; OFPlugin *plugin; path = [path stringByAppendingString: @PLUGIN_SUFFIX]; if ((handle = of_dlopen(path, OF_RTLD_LAZY)) == NULL) @throw [OFInitializationFailedException exceptionWithClass: self]; objc_autoreleasePoolPop(pool); initPlugin = (init_plugin_t)(uintptr_t)of_dlsym(handle, "init_plugin"); if (initPlugin == (init_plugin_t)0 || (plugin = initPlugin()) == nil) { |
︙ | ︙ |