diff options
author | Roy Marples <roy@marples.name> | 2007-05-14 17:05:55 +0000 |
---|---|---|
committer | Roy Marples <roy@marples.name> | 2007-05-14 17:05:55 +0000 |
commit | d0308aaecd1cb2f1c620a742f2fbaee00cb03c04 (patch) | |
tree | 5dab3c6c2afa6ca6f43ea9ba21ec0b3e379a9599 /src/rc-plugin.c | |
parent | b2e832418485f177804b42ff02c115db0bdbd50f (diff) |
Use correct function casts. Use dlfunc where available to remove ISO warnings :)
Diffstat (limited to 'src/rc-plugin.c')
-rw-r--r-- | src/rc-plugin.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/rc-plugin.c b/src/rc-plugin.c index 2d3d7072..2c8bfff5 100644 --- a/src/rc-plugin.c +++ b/src/rc-plugin.c @@ -23,7 +23,7 @@ typedef struct plugin { char *name; void *handle; - int (*hook) (rc_hook_t hook, const char *name); + int (*hook) (rc_hook_t, const char *); struct plugin *next; } plugin_t; @@ -47,7 +47,7 @@ void rc_plugin_load (void) char *p = rc_strcatpaths (RC_PLUGINDIR, file, NULL); void *h = dlopen (p, RTLD_LAZY); char *func; - void *f; + int (*fptr) (rc_hook_t, const char *); int len; if (! h) { @@ -62,8 +62,12 @@ void rc_plugin_load (void) func = rc_xmalloc (sizeof (char *) * len); snprintf (func, len, "_%s_hook", file); - f = dlsym (h, func); - if (! f) { +#ifdef __FreeBSD__ + fptr = (int (*)(rc_hook_t, const char*)) dlfunc (h, func); +#else + fptr = (int (*)(rc_hook_t, const char*)) dlsym (h, func); +#endif + if (! fptr) { eerror ("`%s' does not expose the symbol `%s'", p, func); dlclose (h); } else { @@ -76,7 +80,7 @@ void rc_plugin_load (void) memset (plugin, 0, sizeof (plugin_t)); plugin->name = rc_xstrdup (file); plugin->handle = h; - plugin->hook = f; + plugin->hook = fptr; } free (func); |