Diff between 67e2aa650792d03249063ce45bb12f2cab7e0cc2 and 7aa82b382a9742ad1f6dc1b91e0f340554b82a23

Changed Files

File Additions Deletions Status
obexd/plugins/filesystem.c +1 -1 modified
obexd/plugins/ftp.c +1 -1 modified
obexd/plugins/opp.c +1 -1 modified
obexd/src/plugin.c +10 -1 modified
obexd/src/plugin.h +7 -0 modified

Full Patch

diff --git a/obexd/plugins/filesystem.c b/obexd/plugins/filesystem.c
index 4a06c98..080b771 100644
--- a/obexd/plugins/filesystem.c
+++ b/obexd/plugins/filesystem.c
@@ -392,4 +392,4 @@ static void filesystem_exit(void)
 	obex_mime_type_driver_unregister(&file);
 }
 
-OBEX_PLUGIN_DEFINE("filesystem", filesystem_init, filesystem_exit)
+OBEX_PLUGIN_DEFINE(filesystem, filesystem_init, filesystem_exit)
diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c
index 82f16f2..0736095 100644
--- a/obexd/plugins/ftp.c
+++ b/obexd/plugins/ftp.c
@@ -473,4 +473,4 @@ static void ftp_exit(void)
 	obex_service_driver_unregister(&pcsuite);
 }
 
-OBEX_PLUGIN_DEFINE("ftp", ftp_init, ftp_exit)
+OBEX_PLUGIN_DEFINE(ftp, ftp_init, ftp_exit)
diff --git a/obexd/plugins/opp.c b/obexd/plugins/opp.c
index 7d5a735..64de753 100644
--- a/obexd/plugins/opp.c
+++ b/obexd/plugins/opp.c
@@ -219,4 +219,4 @@ static void opp_exit(void)
 	obex_service_driver_unregister(&driver);
 }
 
-OBEX_PLUGIN_DEFINE("opp", opp_init, opp_exit)
+OBEX_PLUGIN_DEFINE(opp, opp_init, opp_exit)
diff --git a/obexd/src/plugin.c b/obexd/src/plugin.c
index b4c4a11..7131ada 100644
--- a/obexd/src/plugin.c
+++ b/obexd/src/plugin.c
@@ -79,14 +79,22 @@ static gboolean add_plugin(void *handle, struct obex_plugin_desc *desc)
 	return TRUE;
 }
 
+#include "builtin.h"
+
 gboolean plugin_init(void)
 {
 	GDir *dir;
 	const gchar *file;
+	unsigned int i;
 
 	if (strlen(PLUGINDIR) == 0)
 		return FALSE;
 
+	debug("Loading builtin plugins");
+
+	for (i = 0; __obex_builtin[i]; i++)
+		add_plugin(NULL,  __obex_builtin[i]);
+
 	debug("Loading plugins %s", PLUGINDIR);
 
 	dir = g_dir_open(PLUGINDIR, 0, NULL);
@@ -142,7 +150,8 @@ void plugin_cleanup(void)
 		if (plugin->desc->exit)
 			plugin->desc->exit();
 
-		dlclose(plugin->handle);
+		if (plugin->handle != NULL)
+			dlclose(plugin->handle);
 
 		g_free(plugin);
 	}
diff --git a/obexd/src/plugin.h b/obexd/src/plugin.h
index 086fa59..0439cd1 100644
--- a/obexd/src/plugin.h
+++ b/obexd/src/plugin.h
@@ -27,9 +27,16 @@ struct obex_plugin_desc {
 	void (*exit) (void);
 };
 
+#ifdef OBEX_PLUGIN_BUILTIN
+#define OBEX_PLUGIN_DEFINE(name, init, exit) \
+		struct obex_plugin_desc __obex_builtin_ ## name = { \
+			#name, init, exit \
+		};
+#else
 #define OBEX_PLUGIN_DEFINE(name,init,exit) \
 		extern struct obex_plugin_desc obex_plugin_desc \
 				__attribute__ ((visibility("default"))); \
 		struct obex_plugin_desc obex_plugin_desc = { \
 			name, init, exit \
 		};
+#endif