summaryrefslogtreecommitdiff
path: root/winnie
diff options
context:
space:
mode:
Diffstat (limited to 'winnie')
-rw-r--r--winnie/src/client_plugins.cc148
-rw-r--r--winnie/src/client_plugins.h2
-rw-r--r--winnie/src/main.cc51
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();
}