Overview
Comment: | of_plugin_handle_t -> OFPluginHandle |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | new-naming-convention |
Files: | files | file ages | folders |
SHA3-256: |
cedc0cb75e9c002f78c840079c5239d4 |
User & Date: | js on 2021-04-17 14:24:46 |
Other Links: | branch diff | manifest | tags |
Context
2021-04-17
| ||
14:33 | Rename of_http_* check-in: 83d8f3e5f6 user: js tags: new-naming-convention | |
14:24 | of_plugin_handle_t -> OFPluginHandle check-in: cedc0cb75e user: js tags: new-naming-convention | |
14:21 | of_map_table_functions_t -> OFMapTableFunctions check-in: 943d9bd388 user: js tags: new-naming-convention | |
Changes
Modified src/OFPlugin.h from [6278a1d5c2] to [e247c60403].
︙ | ︙ | |||
17 18 19 20 21 22 23 | @class OFString; #ifndef OF_WINDOWS # include <dlfcn.h> # define OF_RTLD_LAZY RTLD_LAZY # define OF_RTLD_NOW RTLD_NOW | | | | | | | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 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 62 63 64 65 | @class OFString; #ifndef OF_WINDOWS # include <dlfcn.h> # define OF_RTLD_LAZY RTLD_LAZY # define OF_RTLD_NOW RTLD_NOW typedef void *OFPluginHandle; #else # include <windows.h> # define OF_RTLD_LAZY 0 # define OF_RTLD_NOW 0 typedef HMODULE OFPluginHandle; #endif OF_ASSUME_NONNULL_BEGIN /** * @class OFPlugin OFPlugin.h ObjFW/OFPlugin.h * * @brief Provides a system for loading plugins at runtime. */ @interface OFPlugin: OFObject { OFPluginHandle _pluginHandle; OF_RESERVE_IVARS(OFPlugin, 4) } /** * @brief Loads a plugin from a file. * * @param path Path to the plugin file. The suffix is appended automatically. * @return The loaded plugin */ + (OF_KINDOF(OFPlugin *))pluginWithPath: (OFString *)path; @end #ifdef __cplusplus extern "C" { #endif extern OFPluginHandle OFDlopen(OFString *path, int flags); extern void *OFDlsym(OFPluginHandle handle, const char *symbol); extern OFString *_Nullable OFDlerror(void); extern void OFDlclose(OFPluginHandle handle); #ifdef __cplusplus } #endif OF_ASSUME_NONNULL_END |
Modified src/OFPlugin.m from [8802d6d561] to [b47ab783df].
︙ | ︙ | |||
28 29 30 31 32 33 34 | #import "OFSystemInfo.h" #import "OFInitializationFailedException.h" #import "OFLoadPluginFailedException.h" typedef OFPlugin *(*init_plugin_t)(void); | | | | | | | | | | | | 28 29 30 31 32 33 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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | #import "OFSystemInfo.h" #import "OFInitializationFailedException.h" #import "OFLoadPluginFailedException.h" typedef OFPlugin *(*init_plugin_t)(void); OFPluginHandle OFDlopen(OFString *path, int flags) { #ifndef OF_WINDOWS return dlopen([path cStringWithEncoding: [OFLocale encoding]], flags); #else if (path == nil) return GetModuleHandle(NULL); if ([OFSystemInfo isWindowsNT]) return LoadLibraryW(path.UTF16String); else return LoadLibraryA( [path cStringWithEncoding: [OFLocale encoding]]); #endif } void * OFDlsym(OFPluginHandle handle, const char *symbol) { #ifndef OF_WINDOWS return dlsym(handle, symbol); #else return (void *)(uintptr_t)GetProcAddress(handle, symbol); #endif } void OFDlclose(OFPluginHandle handle) { #ifndef OF_WINDOWS dlclose(handle); #else FreeLibrary(handle); #endif } OFString * OFDlerror(void) { #ifndef OF_WINDOWS return [OFString stringWithCString: dlerror() encoding: [OFLocale encoding]]; #else return nil; #endif } @implementation OFPlugin + (id)pluginWithPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); OFPluginHandle handle; init_plugin_t initPlugin; OFPlugin *plugin; #if defined(OF_MACOS) path = [path stringByAppendingFormat: @".bundle/Contents/MacOS/%@", path.lastPathComponent]; #elif defined(OF_IOS) path = [path stringByAppendingFormat: @".bundle/%@", path.lastPathComponent]; #else path = [path stringByAppendingString: @PLUGIN_SUFFIX]; #endif if ((handle = OFDlopen(path, OF_RTLD_LAZY)) == NULL) @throw [OFLoadPluginFailedException exceptionWithPath: path error: OFDlerror()]; objc_autoreleasePoolPop(pool); initPlugin = (init_plugin_t)(uintptr_t)OFDlsym(handle, "init_plugin"); if (initPlugin == (init_plugin_t)0 || (plugin = initPlugin()) == nil) { OFDlclose(handle); @throw [OFInitializationFailedException exceptionWithClass: self]; } plugin->_pluginHandle = handle; return plugin; } |
︙ | ︙ | |||
130 131 132 133 134 135 136 | } return [super init]; } - (void)dealloc { | | | | 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | } return [super init]; } - (void)dealloc { OFPluginHandle h = _pluginHandle; [super dealloc]; OFDlclose(h); } @end |
Modified utils/ofhttp/OFHTTP.m from [b36faae7ff] to [88b7d0694f].
︙ | ︙ | |||
281 282 283 284 285 286 287 | #ifdef OF_HAVE_PLUGINS + (void)initialize { if (self != [OFHTTP class]) return; /* Opportunistically try loading ObjOpenSSL and ignore any errors. */ | | | 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | #ifdef OF_HAVE_PLUGINS + (void)initialize { if (self != [OFHTTP class]) return; /* Opportunistically try loading ObjOpenSSL and ignore any errors. */ OFDlopen(@LIB_PREFIX @"objopenssl" @LIB_SUFFIX, OF_RTLD_LAZY); } #endif - (instancetype)init { self = [super init]; |
︙ | ︙ |