X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/e7eb3a2744aa45179daea235800753d3d1955338..HEAD:/server/plugin.c diff --git a/server/plugin.c b/server/plugin.c index 2032d9d..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 @@ -15,7 +15,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - +/** @file server/plugin.c + * @brief Server plugin interface + */ #include "disorder-server.h" #include @@ -26,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; }; @@ -52,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); @@ -63,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; } @@ -71,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; } @@ -84,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; }