X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/812b526d127c6657e571db8b33a58137af6709cd..53a4a6fdcc52280765216ff019cf77b85ec48c18:/server/plugin.c diff --git a/server/plugin.c b/server/plugin.c index 6695d5a..6856e71 100644 --- a/server/plugin.c +++ b/server/plugin.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2004-2008 Richard Kettlewell + * Copyright (C) 2004-2009, 2011 Richard Kettlewell * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,9 +28,15 @@ # define SOSUFFIX ".so" #endif +/** @brief A loaded plugin */ struct plugin { + /** @brief Next plugin */ struct plugin *next; + + /** @brief Handle returned from dlopen() */ void *dlhandle; + + /** @brief Plugin name */ const char *name; }; @@ -54,7 +60,7 @@ const struct plugin *open_plugin(const char *name, if(access(p, R_OK) == 0) { h = dlopen(p, RTLD_NOW); if(!h) { - error(0, "error opening %s: %s", p, dlerror()); + disorder_error(0, "error opening %s: %s", p, dlerror()); continue; } pl = xmalloc(sizeof *pl); @@ -65,7 +71,8 @@ const struct plugin *open_plugin(const char *name, return pl; } } - (flags & PLUGIN_FATAL ? fatal : error)(0, "cannot find plugin '%s'", name); + (flags & PLUGIN_FATAL ? disorder_fatal : disorder_error) + (0, "cannot find plugin '%s'", name); return 0; } @@ -73,10 +80,10 @@ function_t *get_plugin_function(const struct plugin *pl, const char *symbol) { function_t *f; - f = (function_t *)dlsym(pl->dlhandle, symbol); + f = (function_t *)dlfunc(pl->dlhandle, symbol); if(!f) - fatal(0, "error looking up function '%s' in '%s': %s", - symbol, pl->name, dlerror()); + disorder_fatal(0, "error looking up function '%s' in '%s': %s", + symbol, pl->name, dlerror()); return f; } @@ -86,8 +93,8 @@ const void *get_plugin_object(const struct plugin *pl, o = dlsym(pl->dlhandle, symbol); if(!o) - fatal(0, "error looking up object '%s' in '%s': %s", - symbol, pl->name, dlerror()); + disorder_fatal(0, "error looking up object '%s' in '%s': %s", + symbol, pl->name, dlerror()); return o; }