Differences From Artifact [ee4d5662a9]:
- File
src/OFPlugin.m
— part of check-in
[179174571e]
at
2009-04-19 17:06:46
on branch trunk
— Don't use forwarding for OFPlugin.
This is faster and we don't rely on forwarding which is broken in
both, the GNU and the Apple runtime. Eventually, there will be an
implementation for forwarding that does work around the runtime bugs,
but still, an implementation of OFPlugin without forwarding makes more
sense. (user: js, size: 1562) [annotate] [blame] [check-ins using]
To Artifact [b72d21c5c5]:
- File src/OFPlugin.m — part of check-in [066bf9c8c3] at 2009-04-19 20:29:58 on branch trunk — Remove stuff forgotten after moving code in OFPlugin. (user: js, size: 1447) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
22 23 24 25 26 27 28 | + pluginFromFile: (const char*)path { char *file; size_t pathlen, suffixlen; void *handle; OFPlugin *(*init_plugin)(); OFPlugin *plugin; | < < < | < < | < < | | 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 | + pluginFromFile: (const char*)path { char *file; size_t pathlen, suffixlen; void *handle; OFPlugin *(*init_plugin)(); OFPlugin *plugin; if ((self = [super init])) { pathlen = strlen(path); suffixlen = strlen(PLUGIN_SUFFIX); if ((file = malloc(pathlen + suffixlen + 1)) == NULL) { @throw [OFNoMemException newWithClass: self andSize: pathlen + suffixlen + 1]; } memcpy(file, path, pathlen); memcpy(file + pathlen, PLUGIN_SUFFIX, suffixlen); file[pathlen + suffixlen] = 0; if ((handle = dlopen(file, RTLD_NOW)) == NULL) { free(file); @throw [OFInitializationFailedException newWithClass: self]; } free(file); if ((init_plugin = dlsym(handle, "init_plugin")) == NULL || (plugin = init_plugin()) == nil) { dlclose(handle); @throw [OFInitializationFailedException newWithClass: self]; } plugin->handle = handle; return plugin; } return self; |
︙ | ︙ |