From: <svn...@op...> - 2009-03-28 18:16:13
|
Author: bricks Date: Sat Mar 28 19:16:08 2009 New Revision: 5383 URL: http://www.opensync.org/changeset/5383 Log: changed list pattern for all plugin related interfaces refs #975 Modified: trunk/opensync.sym trunk/opensync/client/opensync_client.c trunk/opensync/plugin/opensync_plugin_env.c trunk/opensync/plugin/opensync_plugin_env.h trunk/opensync/plugin/opensync_plugin_env_internals.h trunk/opensync/plugin/opensync_plugin_info.c trunk/opensync/plugin/opensync_plugin_info.h trunk/tests/engine-tests/check_engine_error.c trunk/tests/mock-plugin/mock_sync.c trunk/tools/osyncplugin.c trunk/wrapper/opensync-plugin.i Modified: trunk/opensync.sym ============================================================================== --- trunk/opensync.sym Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/opensync.sym Sat Mar 28 19:16:08 2009 (r5383) @@ -529,10 +529,9 @@ osync_plugin_connection_usb_set_vendorid osync_plugin_discover osync_plugin_env_find_plugin +osync_plugin_env_get_plugins osync_plugin_env_load osync_plugin_env_new -osync_plugin_env_nth_plugin -osync_plugin_env_num_plugins osync_plugin_env_ref osync_plugin_env_register_plugin osync_plugin_env_unref @@ -551,10 +550,9 @@ osync_plugin_info_get_groupname osync_plugin_info_get_loop osync_plugin_info_get_main_sink +osync_plugin_info_get_objtypes osync_plugin_info_get_version osync_plugin_info_new -osync_plugin_info_nth_objtype -osync_plugin_info_num_objtypes osync_plugin_info_ref osync_plugin_info_set_capabilities osync_plugin_info_set_config Modified: trunk/opensync/client/opensync_client.c ============================================================================== --- trunk/opensync/client/opensync_client.c Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/opensync/client/opensync_client.c Sat Mar 28 19:16:08 2009 (r5383) @@ -30,6 +30,8 @@ #include "opensync-helper.h" #include "helper/opensync_hashtable_internals.h" +#include "common/opensync_list.h" + #include "opensync-ipc.h" #include "ipc/opensync_serializer_internals.h" #include "ipc/opensync_message_internals.h" @@ -575,8 +577,9 @@ const char *objtype = NULL; const char *preferred_format = NULL; OSyncList *o = NULL; + OSyncList *objtypesinks = NULL; + OSyncList *list; OSyncObjFormatSink *format_sink = NULL; - unsigned int n, num_sinks; osync_bool couldinit; osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, client, message, error); @@ -698,10 +701,10 @@ goto error; } - num_sinks = osync_plugin_info_num_objtypes(client->plugin_info); - for (n = 0; n < num_sinks; n++) { - - sink = osync_plugin_info_nth_objtype(client->plugin_info, n); + objtypesinks = osync_plugin_info_get_objtypes(client->plugin_info); + list = objtypesinks; + while (list) { + sink = (OSyncObjTypeSink*)list->data; if (!osync_objtype_sink_load_anchor(sink, client->plugin_info, error)) { goto error_finalize; } @@ -709,8 +712,9 @@ if (!osync_objtype_sink_load_hashtable(sink, client->plugin_info, error)) { goto error_finalize; } - + list = list->next; } + osync_list_free(objtypesinks); main_sink = osync_plugin_info_get_main_sink(client->plugin_info); if (main_sink) { @@ -745,6 +749,7 @@ error_free_message: osync_message_unref(reply); error_finalize: + osync_list_free(objtypesinks); osync_plugin_finalize(client->plugin, client->plugin_data); error: osync_free(enginepipe); @@ -816,10 +821,8 @@ static osync_bool _osync_client_handle_discover(OSyncClient *client, OSyncMessage *message, OSyncError **error) { OSyncMessage *reply = NULL; - unsigned int i = 0; OSyncPluginConfig *config = NULL; OSyncList *res = NULL; - unsigned int numobjs = 0; unsigned int avail = 0; OSyncObjTypeSink *sink = NULL; OSyncVersion *version = NULL; @@ -828,6 +831,8 @@ int size = 0; unsigned int num_res = 0; OSyncPluginResource *resource = NULL; + OSyncList *objtypesinks = NULL; + OSyncList *list; config = osync_plugin_info_get_config(client->plugin_info); res = osync_plugin_config_get_resources(config); @@ -846,24 +851,29 @@ else osync_message_write_int(reply, 0); - numobjs = osync_plugin_info_num_objtypes(client->plugin_info); - for (i = 0; i < numobjs; i++) { - sink = osync_plugin_info_nth_objtype(client->plugin_info, i); + objtypesinks = osync_plugin_info_get_objtypes(client->plugin_info); + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; if (osync_objtype_sink_is_available(sink)) { avail++; } + list = list->next; } osync_message_write_uint(reply, avail); - for (i = 0; i < numobjs; i++) { - sink = osync_plugin_info_nth_objtype(client->plugin_info, i); + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; if (osync_objtype_sink_is_available(sink)) { if (!osync_marshal_objtype_sink(reply, sink, error)) goto error_free_message; } + list = list->next; } - + osync_list_free(objtypesinks); + version = osync_plugin_info_get_version(client->plugin_info); if (version) { osync_message_write_int(reply, 1); @@ -909,6 +919,7 @@ return TRUE; error_free_message: + osync_list_free(objtypesinks); osync_message_unref(reply); error: osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); Modified: trunk/opensync/plugin/opensync_plugin_env.c ============================================================================== --- trunk/opensync/plugin/opensync_plugin_env.c Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/opensync/plugin/opensync_plugin_env.c Sat Mar 28 19:16:08 2009 (r5383) @@ -214,9 +214,9 @@ return osync_list_length(env->plugins); } -OSyncPlugin *osync_plugin_env_nth_plugin(OSyncPluginEnv *env, unsigned int nth) +OSyncList *osync_plugin_env_get_plugins(OSyncPluginEnv *env) { - return (OSyncPlugin *)osync_list_nth_data(env->plugins, nth); + return osync_list_copy(env->plugins); } osync_bool osync_plugin_env_plugin_is_usable(OSyncPluginEnv *env, const char *pluginname, OSyncError **error) Modified: trunk/opensync/plugin/opensync_plugin_env.h ============================================================================== --- trunk/opensync/plugin/opensync_plugin_env.h Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/opensync/plugin/opensync_plugin_env.h Sat Mar 28 19:16:08 2009 (r5383) @@ -101,26 +101,12 @@ */ OSYNC_EXPORT OSyncPlugin *osync_plugin_env_find_plugin(OSyncPluginEnv *env, const char *name); -/** @brief Returns the number of loaded plugins - * - * Returns the number of loaded plugins. 0 if used before initialization - * - * @param env Pointer to a OSyncPluginEnv environment - * @returns Number of plugins - * - */ -OSYNC_EXPORT unsigned int osync_plugin_env_num_plugins(OSyncPluginEnv *env); - -/** @brief Returns pointer to nth plugin - * - * Returns pointer to nth plugin - * - * @param env Pointer to a OSyncPluginEnv environment - * @param nth Which plugin to return - * @returns Pointer to plugin +/* @brief Get all plugins which are registered in the Plugin Env * + * @param env Pointer to a OSyncPluginEnv + * @return A shallow copy of the internal plugin list */ -OSYNC_EXPORT OSyncPlugin *osync_plugin_env_nth_plugin(OSyncPluginEnv *env, unsigned int nth); +OSYNC_EXPORT OSyncList *osync_plugin_env_get_plugins(OSyncPluginEnv *env); /*@}*/ Modified: trunk/opensync/plugin/opensync_plugin_env_internals.h ============================================================================== --- trunk/opensync/plugin/opensync_plugin_env_internals.h Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/opensync/plugin/opensync_plugin_env_internals.h Sat Mar 28 19:16:08 2009 (r5383) @@ -50,6 +50,18 @@ */ OSYNC_TEST_EXPORT osync_bool osync_plugin_env_plugin_is_usable(OSyncPluginEnv *env, const char *pluginname, OSyncError **error); +/** @brief Returns the number of loaded plugins + * + * TODO: This function isn't necessary anymore and can possibly be removed + * + * Returns the number of loaded plugins. 0 if used before initialization + * + * @param env Pointer to a OSyncPluginEnv environment + * @returns Number of plugins + * + */ +OSYNC_TEST_EXPORT unsigned int osync_plugin_env_num_plugins(OSyncPluginEnv *env); + /*@}*/ #endif /* _OPENSYNC_PLUGIN_ENV_INTERNALS_H_ */ Modified: trunk/opensync/plugin/opensync_plugin_info.c ============================================================================== --- trunk/opensync/plugin/opensync_plugin_info.c Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/opensync/plugin/opensync_plugin_info.c Sat Mar 28 19:16:08 2009 (r5383) @@ -27,6 +27,7 @@ #include "opensync-merger.h" #include "opensync-version.h" +#include "opensync_list.h" OSyncPluginInfo *osync_plugin_info_new(OSyncError **error) { @@ -171,16 +172,9 @@ osync_objtype_sink_ref(sink); } -unsigned int osync_plugin_info_num_objtypes(OSyncPluginInfo *info) -{ - osync_assert(info); - return osync_list_length(info->objtypes); -} - -OSyncObjTypeSink *osync_plugin_info_nth_objtype(OSyncPluginInfo *info, unsigned int nth) -{ +OSyncList *osync_plugin_info_get_objtypes(OSyncPluginInfo *info) { osync_assert(info); - return osync_list_nth_data(info->objtypes, nth); + return osync_list_copy(info->objtypes); } OSyncObjTypeSink *osync_plugin_info_get_main_sink(OSyncPluginInfo *info) Modified: trunk/opensync/plugin/opensync_plugin_info.h ============================================================================== --- trunk/opensync/plugin/opensync_plugin_info.h Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/opensync/plugin/opensync_plugin_info.h Sat Mar 28 19:16:08 2009 (r5383) @@ -110,23 +110,13 @@ */ OSYNC_EXPORT void osync_plugin_info_add_objtype(OSyncPluginInfo *info, OSyncObjTypeSink *sink); -/** @brief Returns the number of added object types (sinks) - * - * @param info Pointer to the plugin info object - * @returns the number of object types in the plugin info - * - */ -OSYNC_EXPORT unsigned int osync_plugin_info_num_objtypes(OSyncPluginInfo *info); - -/** @brief Returns the nth added object type (sink) - * - * @param info Pointer to the plugin info object - * @param nth the index of the object type (sink) to return - * @returns the object type (sink) at the specified index +/** + * @brief Returns all Objtype Sinks as a list * + * @param Pointer to a OSyncPluginInfo + * @return A shallow copy of the internal objtype list */ -OSYNC_EXPORT OSyncObjTypeSink *osync_plugin_info_nth_objtype(OSyncPluginInfo *info, unsigned int nth); - +OSYNC_EXPORT OSyncList *osync_plugin_info_get_objtypes(OSyncPluginInfo *info); /** @brief Returns the Main Sink * Modified: trunk/tests/engine-tests/check_engine_error.c ============================================================================== --- trunk/tests/engine-tests/check_engine_error.c Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/tests/engine-tests/check_engine_error.c Sat Mar 28 19:16:08 2009 (r5383) @@ -130,8 +130,8 @@ mock_env *env = osync_try_malloc0(sizeof(mock_env), error); osync_assert(env); - - OSyncObjTypeSink *sink = osync_plugin_info_nth_objtype(info, 0); + OSyncList *objtypesinks = osync_plugin_info_get_objtypes(info); + OSyncObjTypeSink *sink = (OSyncObjTypeSink*)objtypesinks->data; osync_assert(sink); OSyncObjFormatSink *formatsink = osync_objformat_sink_new("mockformat1", error); @@ -147,6 +147,7 @@ osync_plugin_info_add_objtype(info, sink); osync_objtype_sink_unref(sink); + osync_list_free(objtypesinks); osync_trace(TRACE_EXIT, "%s: %p", __func__, env); return (void *)env; } Modified: trunk/tests/mock-plugin/mock_sync.c ============================================================================== --- trunk/tests/mock-plugin/mock_sync.c Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/tests/mock-plugin/mock_sync.c Sat Mar 28 19:16:08 2009 (r5383) @@ -607,15 +607,17 @@ /* Now we register the objtypes that we can sync. This plugin is special. It can * synchronize any objtype we configure it to sync and where a conversion * path to the file format can be found */ - int i, numobjs = osync_plugin_info_num_objtypes(info); - for (i = 0; i < numobjs; i++) { + OSyncList *objtypesinks = osync_plugin_info_get_objtypes(info); + OSyncList *list = objtypesinks; + while(list) { MockDir *dir = osync_try_malloc0(sizeof(MockDir), error); osync_assert(dir); dir->committed_all = TRUE; - OSyncObjTypeSink *sink = osync_plugin_info_nth_objtype(info, i); + OSyncObjTypeSink *sink = (OSyncObjTypeSink*)list->data; osync_assert(sink); + list = list->next; const char *objtype = osync_objtype_sink_get_name(sink); dir->res = osync_plugin_config_find_active_resource(config, objtype); @@ -723,7 +725,7 @@ #endif env->directories = g_list_append(env->directories, dir); } - + osync_list_free(objtypesinks); osync_trace(TRACE_EXIT, "%s: %p", __func__, env); return (void *)env; } Modified: trunk/tools/osyncplugin.c ============================================================================== --- trunk/tools/osyncplugin.c Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/tools/osyncplugin.c Sat Mar 28 19:16:08 2009 (r5383) @@ -448,23 +448,30 @@ static void *plugin_initialize(OSyncError **error) { - unsigned int n, num_sinks = osync_plugin_info_num_objtypes(plugin_info); + OSyncList *list; + OSyncList *objtypesinks = NULL; void *plugin_data; osync_bool couldinit; couldinit = osync_plugin_initialize(plugin, &(plugin_data), plugin_info, error); - - for (n = 0; n < num_sinks; n++) { - OSyncObjTypeSink *sink = osync_plugin_info_nth_objtype(plugin_info, n); - - if (!osync_objtype_sink_load_anchor(sink, plugin_info, error)) - return NULL; + objtypesinks = osync_plugin_info_get_objtypes(plugin_info); + list = objtypesinks; + while(list) { + OSyncObjTypeSink *sink = (OSyncObjTypeSink*)list->data; + if (!osync_objtype_sink_load_anchor(sink, plugin_info, error)) + goto error; if (!osync_objtype_sink_load_hashtable(sink, plugin_info, error)) - return NULL; + goto error; + + list = list->next; } + osync_list_free(objtypesinks); return plugin_data; +error: + osync_list_free(objtypesinks); + return NULL; } static void finalize_plugin(void **plugin_data) @@ -598,8 +605,9 @@ static osync_bool get_changes(Command *cmd, SyncType type, OSyncError **error) { - int num, i; OSyncObjTypeSink *sink = NULL; + OSyncList *list; + OSyncList *objtypesinks = NULL; const char *objtype = cmd->arg; if (objtype) { @@ -613,25 +621,28 @@ } else { /* all available objtypes */ - num = osync_plugin_info_num_objtypes(plugin_info); - for (i=0; i < num; i++) { - sink = osync_plugin_info_nth_objtype(plugin_info, i); + objtypesinks = osync_plugin_info_get_objtypes(plugin_info); + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; cmd->sink = sink; if (!get_changes_sink(cmd, sink, type, error)) goto error; + list = list->next; } - /* last but not least - the main sink */ if (get_main_sink()) - if (!get_changes_sink(cmd, get_main_sink(), type, error)) goto error; + + osync_list_free(objtypesinks); } return TRUE; error: + osync_list_free(objtypesinks); return FALSE; } @@ -699,8 +710,9 @@ static osync_bool connect_plugin(Command *cmd, OSyncError **error) { - unsigned int i, num; OSyncObjTypeSink *sink = NULL; + OSyncList *objtypesinks = NULL; + OSyncList *list; const char *objtype = cmd->arg; if (objtype) { @@ -711,22 +723,27 @@ if (!connect_sink(cmd, sink, error)) goto error; } else { - num = osync_plugin_info_num_objtypes(plugin_info); - for (i=0; i < num; i++) { - sink = osync_plugin_info_nth_objtype(plugin_info, i); + objtypesinks = osync_plugin_info_get_objtypes(plugin_info); + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; if (!connect_sink(cmd, sink, error)) goto error; + list = list->next; } /* last but not least - the main sink */ if (get_main_sink()) if (!connect_sink(cmd, get_main_sink(), error)) goto error; + + osync_list_free(objtypesinks); } return TRUE; error: + osync_list_free(objtypesinks); return FALSE; } @@ -790,8 +807,8 @@ static osync_bool disconnect(Command *cmd, OSyncError **error) { - - int i, num; + OSyncList *list; + OSyncList *objtypesinks = NULL; OSyncObjTypeSink *sink = NULL; const char *objtype = cmd->arg; @@ -803,22 +820,27 @@ if (!disconnect_sink(cmd, sink, error)) goto error; } else { - num = osync_plugin_info_num_objtypes(plugin_info); - for (i=0; i < num; i++) { - sink = osync_plugin_info_nth_objtype(plugin_info, i); + objtypesinks = osync_plugin_info_get_objtypes(plugin_info); + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; if (!disconnect_sink(cmd, sink, error)) goto error; + list = list->next; } /* last but not least - the main sink */ if (get_main_sink()) if (!disconnect_sink(cmd, get_main_sink(), error)) goto error; + + osync_list_free(objtypesinks); } return TRUE; error: + osync_list_free(objtypesinks); return FALSE; } @@ -882,7 +904,8 @@ static osync_bool commit(Command *cmd, OSyncChange *change, OSyncError **error) { - int i, num; + OSyncList *list; + OSyncList *objtypesinks = NULL; OSyncObjTypeSink *sink = NULL; const char *objtype = cmd->arg; @@ -896,22 +919,27 @@ if (!commit_sink(cmd, sink, change, error)) goto error; } else { - num = osync_plugin_info_num_objtypes(plugin_info); - for (i=0; i < num; i++) { - sink = osync_plugin_info_nth_objtype(plugin_info, i); + objtypesinks = osync_plugin_info_get_objtypes(plugin_info); + list = objtypesinks; + while(list){ + sink = (OSyncObjTypeSink*)list->data; if (!commit_sink(cmd, sink, change, error)) goto error; + list = list->next; } /* last but not least - the main sink */ if (get_main_sink()) if (!commit_sink(cmd, get_main_sink(), change, error)) goto error; + + osync_list_free(objtypesinks); } return TRUE; error: + osync_list_free(objtypesinks); return FALSE; } @@ -998,7 +1026,8 @@ static osync_bool syncdone(Command *cmd, OSyncError **error) { - int i, num; + OSyncList *objtypesinks = NULL; + OSyncList *list; OSyncObjTypeSink *sink = NULL; const char *objtype = cmd->arg; @@ -1010,22 +1039,28 @@ if (!syncdone_sink(cmd, sink, error)) goto error; } else { - num = osync_plugin_info_num_objtypes(plugin_info); - for (i=0; i < num; i++) { - sink = osync_plugin_info_nth_objtype(plugin_info, i); + objtypesinks = osync_plugin_info_get_objtypes(plugin_info); + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; if (!syncdone_sink(cmd, sink, error)) goto error; + + list = list->next; } /* last but not least - the main sink */ if (get_main_sink()) if (!syncdone_sink(cmd, get_main_sink(), error)) goto error; + + osync_list_free(objtypesinks); } return TRUE; error: + osync_list_free(objtypesinks); return FALSE; } @@ -1081,7 +1116,8 @@ static osync_bool committedall(Command *cmd, OSyncError **error) { - int i, num; + OSyncList *list; + OSyncList *objtypesinks = NULL; OSyncObjTypeSink *sink = NULL; const char *objtype = cmd->arg; @@ -1093,22 +1129,28 @@ if (!committedall_sink(cmd, sink, error)) goto error; } else { - num = osync_plugin_info_num_objtypes(plugin_info); - for (i=0; i < num; i++) { - sink = osync_plugin_info_nth_objtype(plugin_info, i); + objtypesinks = osync_plugin_info_get_objtypes(plugin_info); + list = objtypesinks; + while(list) { + sink = (OSyncObjTypeSink*)list->data; if (!committedall_sink(cmd, sink, error)) goto error; + + list = list->next; } /* last but not least - the main sink */ if (get_main_sink()) if (!committedall_sink(cmd, get_main_sink(), error)) goto error; + + osync_list_free(objtypesinks); } return TRUE; error: + osync_list_free(objtypesinks); return FALSE; } @@ -1216,8 +1258,8 @@ } static osync_bool plugin_list(OSyncError **error) { - int num; - int i; + OSyncList *plugins; + OSyncList *list; assert(!plugin_env); @@ -1233,12 +1275,15 @@ if (!osync_plugin_env_load(plugin_env, pluginpath, error)) goto error_free_formatenv; - num= osync_plugin_env_num_plugins(plugin_env); - for(i= 0; i < num; i++) { - OSyncPlugin* plugin= osync_plugin_env_nth_plugin(plugin_env, i); + plugins = osync_plugin_env_get_plugins(plugin_env); + list = plugins; + while(list) { + OSyncPlugin* plugin = (OSyncPlugin*)list->data; fprintf (stdout, "Name: %s\n", osync_plugin_get_name(plugin)); - fprintf (stdout, "Description: %s\n", osync_plugin_get_description(plugin)); - } + fprintf (stdout, "Description: %s\n", osync_plugin_get_description(plugin)); + list = list->next; + } + osync_list_free(plugins); return TRUE; error_free_formatenv: Modified: trunk/wrapper/opensync-plugin.i ============================================================================== --- trunk/wrapper/opensync-plugin.i Sat Mar 28 19:09:31 2009 (r5382) +++ trunk/wrapper/opensync-plugin.i Sat Mar 28 19:16:08 2009 (r5383) @@ -120,11 +120,14 @@ } int num_plugins() { - return osync_plugin_env_num_plugins(self); + OSyncList *plugins = osync_plugin_env_get_plugins(self); + return osync_list_length(plugins); } Plugin *nth_plugin(int nth) { - Plugin *plugin = osync_plugin_env_nth_plugin(self, nth); + OSyncList *plugins = osync_plugin_env_get_plugins(self); + + Plugin *plugin = (OSyncPlugin*)osync_list_nth_data(plugins, nth); if (plugin) osync_plugin_ref(plugin); return plugin; @@ -190,14 +193,20 @@ osync_plugin_info_add_objtype(self, sink); } - int num_objtypes() { - return osync_plugin_info_num_objtypes(self); + unsigned int num_objtypes() { + OSyncList *objtypesinks = osync_plugin_info_get_objtypes(self); + unsigned int num = osync_list_length(objtypesinks); + osync_list_free(objtypesinks); + return num; } ObjTypeSink *nth_objtype(int nth) { - ObjTypeSink *ret = osync_plugin_info_nth_objtype(self, nth); + /* TODO: return a list structure of phython */ + OSyncList *objtypesinks = osync_plugin_info_get_objtypes(self); + ObjTypeSink *ret = (ObjTypeSink*)osync_list_nth_data(objtypesinks, nth); if (ret) osync_objtype_sink_ref(ret); + osync_list_free(objtypesinks); return ret; } |