[libpeas] Cleanup how we create plugin loaders
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libpeas] Cleanup how we create plugin loaders
- Date: Fri, 10 Feb 2012 20:32:13 +0000 (UTC)
commit 2ee9b846ff9a028d18700531010773606c3d2279
Author: Garrett Regier <garrettregier gmail com>
Date: Sun Sep 11 18:41:42 2011 -0700
Cleanup how we create plugin loaders
libpeas/peas-engine.c | 63 +++++++++++++++++++++--------------------------
tests/libpeas/engine.c | 1 +
2 files changed, 29 insertions(+), 35 deletions(-)
---
diff --git a/libpeas/peas-engine.c b/libpeas/peas-engine.c
index de21fbf..b92fe77 100644
--- a/libpeas/peas-engine.c
+++ b/libpeas/peas-engine.c
@@ -580,39 +580,17 @@ peas_engine_class_init (PeasEngineClass *klass)
}
static PeasObjectModule *
-try_to_open_loader_module (const gchar *loader_id,
- gboolean in_subdir)
+load_module (const gchar *module_name,
+ const gchar *module_dir)
{
- gchar *tmp_dirname;
- gchar *loader_dirname;
- gchar *loader_basename;
PeasObjectModule *module;
- if (in_subdir)
- {
- tmp_dirname = peas_dirs_get_plugin_loaders_dir ();
- loader_dirname = g_build_filename (tmp_dirname, loader_id, NULL);
- g_free (tmp_dirname);
- }
- else
- {
- loader_dirname = peas_dirs_get_plugin_loaders_dir ();
- }
-
- /* Let's build the expected filename of the requested plugin loader */
- loader_basename = g_strdup_printf ("lib%sloader.%s", loader_id, G_MODULE_SUFFIX);
-
- g_debug ("Loading loader '%s': '%s/%s'", loader_id, loader_dirname, loader_basename);
-
- module = peas_object_module_new (loader_basename, loader_dirname, TRUE);
-
- g_free (loader_basename);
- g_free (loader_dirname);
+ module = peas_object_module_new (module_name, module_dir, TRUE);
if (!g_type_module_use (G_TYPE_MODULE (module)))
{
g_object_unref (module);
- module = NULL;
+ return NULL;
}
return module;
@@ -623,7 +601,7 @@ get_plugin_loader (PeasEngine *engine,
PeasPluginInfo *info)
{
LoaderInfo *loader_info;
- gchar *loader_id;
+ gchar *loader_id, *module_name, *module_dir;
loader_info = (LoaderInfo *) g_hash_table_lookup (loaders, info->loader);
@@ -642,19 +620,31 @@ get_plugin_loader (PeasEngine *engine,
return loader_info->loader;
}
- /* We need to ensure we use the lowercase loader_id */
loader_id = g_ascii_strdown (info->loader, -1);
+ module_name = g_strconcat (loader_id, "loader", NULL);
+ module_dir = peas_dirs_get_plugin_loaders_dir ();
- loader_info->module = try_to_open_loader_module (loader_id, FALSE);
- if (loader_info->module == NULL)
- loader_info->module = try_to_open_loader_module (loader_id, TRUE);
-
- g_free (loader_id);
+ loader_info->module = load_module (module_name, module_dir);
if (loader_info->module == NULL)
{
- g_hash_table_insert (loaders, g_strdup (info->loader), NULL);
- return NULL;
+ gchar *tmp = module_dir;
+
+ module_dir = g_build_filename (module_dir, loader_id, NULL);
+ loader_info->module = load_module (module_name, module_dir);
+
+ g_free (tmp);
+
+ if (loader_info->module == NULL)
+ {
+ g_warning ("Could not load plugin loader '%s'", info->loader);
+
+ g_free (module_dir);
+ g_free (module_name);
+ g_free (loader_id);
+ g_hash_table_insert (loaders, g_strdup (info->loader), NULL);
+ return NULL;
+ }
}
loader_info->loader = PEAS_PLUGIN_LOADER (
@@ -663,6 +653,9 @@ get_plugin_loader (PeasEngine *engine,
0, NULL));
g_type_module_unuse (G_TYPE_MODULE (loader_info->module));
+ g_free (module_dir);
+ g_free (module_name);
+ g_free (loader_id);
if (loader_info->loader == NULL ||
!peas_plugin_loader_initialize (loader_info->loader))
diff --git a/tests/libpeas/engine.c b/tests/libpeas/engine.c
index 33875ad..cd9b82d 100644
--- a/tests/libpeas/engine.c
+++ b/tests/libpeas/engine.c
@@ -361,6 +361,7 @@ test_engine_nonexistent_loader (PeasEngine *engine)
GError *error = NULL;
PeasPluginInfo *info;
+ testing_util_push_log_hook ("Could not load plugin loader 'does-not-exist'*");
testing_util_push_log_hook ("Could not find loader 'does-not-exist' for*");
info = peas_engine_get_plugin_info (engine, "nonexistent-loader");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]