Enlightenment CVS committal

Author  : pfritz
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore


Modified Files:
        Ecore_Data.h ecore_path.c ecore_plugin.c 


Log Message:
*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

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/Ecore_Data.h,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -3 -r1.48 -r1.49
--- Ecore_Data.h        2 Sep 2007 12:21:00 -0000       1.48
+++ Ecore_Data.h        4 Sep 2007 18:23:47 -0000       1.49
@@ -324,15 +324,13 @@
    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 @@
    /*
     * 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);
 
 
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_path.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- ecore_path.c        2 Sep 2007 17:54:16 -0000       1.15
+++ ecore_path.c        4 Sep 2007 18:23:47 -0000       1.16
@@ -331,7 +331,13 @@
             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);
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_plugin.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- ecore_plugin.c      26 Aug 2007 11:17:21 -0000      1.13
+++ ecore_plugin.c      4 Sep 2007 18:23:47 -0000       1.14
@@ -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 @@
  * 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 @@
 
    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 @@
    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 @@
 
    dlclose(plugin->handle);
 
-   FREE(plugin->name);
    FREE(plugin);
 }
 
@@ -103,7 +120,7 @@
  * @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;
 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to