forked from enlightenment/efl
*API BREAK*
rename ecore_plugin_call() to ecore_plugin_symbol_get() add a version argument to ecore_plugin_load(); it makes it possible to have different versions for the interface. NULL gives you the old behaivor SVN revision: 31616
This commit is contained in:
parent
1078f34211
commit
b2ec7dd266
|
@ -324,15 +324,13 @@ extern "C" {
|
|||
typedef struct _ecore_plugin Ecore_Plugin;
|
||||
struct _ecore_plugin
|
||||
{
|
||||
int group;
|
||||
char *name;
|
||||
void *handle;
|
||||
};
|
||||
|
||||
/*
|
||||
* Load the specified plugin
|
||||
*/
|
||||
EAPI Ecore_Plugin *ecore_plugin_load(int group_id, const char *plugin);
|
||||
EAPI Ecore_Plugin *ecore_plugin_load(int group_id, const char *plugin, const char *version);
|
||||
|
||||
/*
|
||||
* Unload the specified plugin
|
||||
|
@ -342,8 +340,8 @@ extern "C" {
|
|||
/*
|
||||
* Lookup the specified symbol for the plugin
|
||||
*/
|
||||
EAPI void *ecore_plugin_call(Ecore_Plugin * plugin, const char *symbol_name);
|
||||
|
||||
EAPI void *ecore_plugin_symbol_get(Ecore_Plugin * plugin, const char *symbol_name);
|
||||
|
||||
EAPI Ecore_List *ecore_plugin_available_get(int group_id);
|
||||
|
||||
|
||||
|
|
|
@ -331,7 +331,13 @@ ecore_plugin_available_get(int group_id)
|
|||
ext = strrchr(ppath, '.');
|
||||
*ext = '\0';
|
||||
|
||||
ecore_hash_set(plugins, strdup(ppath), (void *)1);
|
||||
if (!ecore_hash_get(plugins, ppath))
|
||||
{
|
||||
char *key;
|
||||
|
||||
key = strdup(ppath);
|
||||
ecore_hash_set(plugins, key, key);
|
||||
}
|
||||
}
|
||||
}
|
||||
ecore_hash_free_key_cb_set(plugins, NULL);
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||
*/
|
||||
#ifndef _WIN32
|
||||
# include <dlfcn.h>
|
||||
# include "ecore_private.h"
|
||||
|
@ -15,12 +18,14 @@ static Ecore_List *loaded_plugins = NULL;
|
|||
* Loads the specified plugin from the specified path group.
|
||||
* @param group_id The path group to search for the plugin to load
|
||||
* @param plugin_name The name of the plugin to load.
|
||||
* @param version The interface version of the plugin. With version
|
||||
* equal to NULL the default will be loaded.
|
||||
* @return A pointer to the newly loaded plugin on success, @c NULL on
|
||||
* failure.
|
||||
* @ingroup Ecore_Plugin
|
||||
*/
|
||||
EAPI Ecore_Plugin *
|
||||
ecore_plugin_load(int group_id, const char *plugin_name)
|
||||
ecore_plugin_load(int group_id, const char *plugin_name, const char *version)
|
||||
{
|
||||
char *path;
|
||||
char temp[PATH_MAX];
|
||||
|
@ -30,14 +35,28 @@ ecore_plugin_load(int group_id, const char *plugin_name)
|
|||
|
||||
CHECK_PARAM_POINTER_RETURN("plugin_name", plugin_name, NULL);
|
||||
|
||||
snprintf(temp, PATH_MAX, "%s.so", plugin_name);
|
||||
if (!version || *version == '\0')
|
||||
snprintf(temp, sizeof(temp), "%s.so", plugin_name);
|
||||
else
|
||||
snprintf(temp, sizeof(temp), "%s.so.%s", plugin_name, version);
|
||||
|
||||
path = ecore_path_group_find(group_id, temp);
|
||||
if (!path && version)
|
||||
{
|
||||
/* if this file doesn't exist try a different order */
|
||||
snprintf(temp, sizeof(temp), "%s.%s.so", plugin_name, version);
|
||||
path = ecore_path_group_find(group_id, temp);
|
||||
}
|
||||
|
||||
if (!path)
|
||||
return NULL;
|
||||
|
||||
handle = dlopen(path, RTLD_LAZY);
|
||||
if (!handle)
|
||||
return NULL;
|
||||
{
|
||||
FREE(path);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate the new plugin and initialize it's fields
|
||||
|
@ -46,12 +65,11 @@ ecore_plugin_load(int group_id, const char *plugin_name)
|
|||
if (!plugin)
|
||||
{
|
||||
dlclose(handle);
|
||||
FREE(path);
|
||||
return NULL;
|
||||
}
|
||||
memset(plugin, 0, sizeof(Ecore_Plugin));
|
||||
|
||||
plugin->group = group_id;
|
||||
plugin->name = strdup(plugin_name);
|
||||
plugin->handle = handle;
|
||||
|
||||
/*
|
||||
|
@ -91,7 +109,6 @@ ecore_plugin_unload(Ecore_Plugin *plugin)
|
|||
|
||||
dlclose(plugin->handle);
|
||||
|
||||
FREE(plugin->name);
|
||||
FREE(plugin);
|
||||
}
|
||||
|
||||
|
@ -103,7 +120,7 @@ ecore_plugin_unload(Ecore_Plugin *plugin)
|
|||
* @ingroup Ecore_Plugin
|
||||
*/
|
||||
EAPI void *
|
||||
ecore_plugin_call(Ecore_Plugin *plugin, const char *symbol_name)
|
||||
ecore_plugin_symbol_get(Ecore_Plugin *plugin, const char *symbol_name)
|
||||
{
|
||||
void *ret;
|
||||
|
||||
|
|
Loading…
Reference in New Issue