diff options
Diffstat (limited to 'winnie')
-rw-r--r-- | winnie/src/client_plugins.cc | 148 | ||||
-rw-r--r-- | winnie/src/client_plugins.h | 2 | ||||
-rw-r--r-- | winnie/src/main.cc | 51 |
3 files changed, 104 insertions, 97 deletions
diff --git a/winnie/src/client_plugins.cc b/winnie/src/client_plugins.cc index a9f0cf8..3bb0c5f 100644 --- a/winnie/src/client_plugins.cc +++ b/winnie/src/client_plugins.cc @@ -19,94 +19,100 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. Author: Eleni Maria Stea <elene.mst@gmail.com> */ +#include "client_plugins.h" +#include <ctype.h> +#include <dlfcn.h> +#include <errno.h> #include <stdio.h> #include <string.h> -#include <errno.h> -#include <ctype.h> #include <vector> -#include <dlfcn.h> -#include "client_plugins.h" struct Plugin { - void *so; + void *so; - bool (*init)(); - void (*cleanup)(); + bool (*init)(); + void (*cleanup)(); }; static char *strip_wspace(char *s); static std::vector<Plugin> plugins; -bool init_client_plugins() +bool +init_client_plugins() { - FILE *fp = fopen("plugins.conf", "r"); - if(!fp) { - fprintf(stderr, "failed to load plugin list: plugins.conf: %s\n", strerror(errno)); - return false; - } - - plugins.clear(); - - char buf[512]; - while(fgets(buf, sizeof buf, fp)) { - char *line = strip_wspace(buf); - - if(!*line || *line == '#') { - continue; - } - - Plugin plugin; - - plugin.so = dlopen(line, RTLD_LAZY); - if(!plugin.so) { - fprintf(stderr, "failed to load plugin: %s: %s\n", line, dlerror()); - continue; - } - - if(!(plugin.init = (bool (*)())dlsym(plugin.so, "init"))) { - fprintf(stderr, "invalid plugin: %s: no init function\n", line); - dlclose(plugin.so); - continue; - } - plugin.cleanup = (void (*)())dlsym(plugin.so, "cleanup"); - - if(!plugin.init()) { - fprintf(stderr, "failed to initialize plugin: %s\n", line); - dlclose(plugin.so); - continue; - } - - printf("loaded plugin: %s\n", line); - plugins.push_back(plugin); - } - - fclose(fp); - return true; + FILE *fp = fopen("plugins.conf", "r"); + if (!fp) { + fprintf(stderr, + "failed to load plugin list: plugins.conf: %s\n", + strerror(errno)); + return false; + } + + plugins.clear(); + + char buf[512]; + while (fgets(buf, sizeof buf, fp)) { + char *line = strip_wspace(buf); + + if (!*line || *line == '#') { + continue; + } + + Plugin plugin; + + plugin.so = dlopen(line, RTLD_LAZY); + if (!plugin.so) { + fprintf(stderr, "failed to load plugin: %s: %s\n", line, dlerror()); + continue; + } + + if (!(plugin.init = (bool (*)()) dlsym(plugin.so, "init"))) { + fprintf(stderr, "invalid plugin: %s: no init function\n", line); + dlclose(plugin.so); + continue; + } + plugin.cleanup = (void (*)()) dlsym(plugin.so, "cleanup"); + + if (!plugin.init()) { + fprintf(stderr, "failed to initialize plugin: %s\n", line); + dlclose(plugin.so); + continue; + } + + printf("loaded plugin: %s\n", line); + plugins.push_back(plugin); + } + + fclose(fp); + return true; } -void destroy_client_plugins() +void +destroy_client_plugins() { - for(size_t i=0; i<plugins.size(); i++) { - if(plugins[i].cleanup) { - plugins[i].cleanup(); - } - dlclose(plugins[i].so); - } - plugins.clear(); + for (size_t i = 0; i < plugins.size(); i++) { + if (plugins[i].cleanup) { + plugins[i].cleanup(); + } + dlclose(plugins[i].so); + } + plugins.clear(); } -static char *strip_wspace(char *s) +static char * +strip_wspace(char *s) { - if(!s || !*s) { - return s; - } - - while(*s && isspace(*s)) s++; - - char *endp = s + strlen(s) - 1; - while(*endp && isspace(*endp)) { - *endp-- = 0; - } - return s; + if (!s || !*s) { + return s; + } + + while (*s && isspace(*s)) + s++; + + char *endp = s + strlen(s) - 1; + while (*endp && isspace(*endp)) { + *endp-- = 0; + } + return s; } diff --git a/winnie/src/client_plugins.h b/winnie/src/client_plugins.h index 406c22b..67dff29 100644 --- a/winnie/src/client_plugins.h +++ b/winnie/src/client_plugins.h @@ -25,4 +25,4 @@ Author: Eleni Maria Stea <elene.mst@gmail.com> bool init_client_plugins(); void destroy_client_plugins(); -#endif // CLIENT_PLUGINS_H_ +#endif // CLIENT_PLUGINS_H_ diff --git a/winnie/src/main.cc b/winnie/src/main.cc index 19f2ab0..6784f46 100644 --- a/winnie/src/main.cc +++ b/winnie/src/main.cc @@ -23,37 +23,38 @@ Author: Eleni Maria Stea <elene.mst@gmail.com> #include <stdlib.h> #include <string.h> -#include "winnie.h" #include "client_plugins.h" +#include "winnie.h" static void cleanup(); -int main() +int +main() { - if(!winnie_init()) { - return 1; - } - if(!init_client_plugins()) { - return 1; - } - - atexit(cleanup); - - Pixmap bg; - if(bg.load("data/bg.ppm")) { - wm->set_background(&bg); - } else { - wm->set_background_color(64, 64, 64); - } - - - while(1) { - process_events(); - } + if (!winnie_init()) { + return 1; + } + if (!init_client_plugins()) { + return 1; + } + + atexit(cleanup); + + Pixmap bg; + if (bg.load("data/bg.ppm")) { + wm->set_background(&bg); + } else { + wm->set_background_color(64, 64, 64); + } + + while (1) { + process_events(); + } } -static void cleanup() +static void +cleanup() { - destroy_client_plugins(); - winnie_shutdown(); + destroy_client_plugins(); + winnie_shutdown(); } |