From: <svn...@op...> - 2009-03-29 15:38:32
|
Author: bricks Date: Sun Mar 29 17:38:26 2009 New Revision: 5425 URL: http://www.opensync.org/changeset/5425 Log: changed list pattern for all group related interfaces refs #975 Modified: trunk/opensync/group/opensync_group.c trunk/opensync/group/opensync_group.h trunk/opensync/group/opensync_group_env.c trunk/opensync/group/opensync_group_env.h trunk/opensync/group/opensync_group_env_internals.h trunk/opensync/group/opensync_group_internals.h trunk/opensync/group/opensync_member.c trunk/opensync/group/opensync_member.h trunk/opensync/group/opensync_member_internals.h trunk/opensync/group/opensync_updater.c trunk/tests/group-tests/check_group.c trunk/tests/support.c trunk/tests/sync-tests/check_sync.c trunk/tools/osyncdump.c Modified: trunk/opensync/group/opensync_group.c ============================================================================== --- trunk/opensync/group/opensync_group.c Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_group.c Sun Mar 29 17:38:26 2009 (r5425) @@ -167,7 +167,7 @@ static GList *osync_group_get_supported_objtypes(OSyncGroup *group) { - GList *m = NULL; + OSyncList *m = NULL; GList *ret = NULL; GHashTable *table = g_hash_table_new(g_str_hash, g_str_equal); @@ -197,7 +197,7 @@ OSyncList *osync_group_get_supported_objtypes_mixed(OSyncGroup *group, OSyncFormatEnv *formatenv) { - GList *m; + OSyncList *m; OSyncList *ret = NULL; OSyncList *t, *targetformats = osync_group_get_objformats(group); @@ -245,7 +245,7 @@ OSyncList *osync_group_get_objformats(OSyncGroup *group) { - GList *m = NULL; + OSyncList *m = NULL; OSyncList *list = NULL; /* Loop over all members... */ @@ -572,7 +572,7 @@ osync_bool osync_group_reset(OSyncGroup *group, OSyncError **error) { OSyncDB *db = NULL; - GList *m = NULL; + OSyncList *m = NULL; char *path = NULL; osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, group, error); @@ -769,7 +769,7 @@ void osync_group_add_member(OSyncGroup *group, OSyncMember *member) { - g_assert(group); + osync_assert(group); if (!osync_member_get_configdir(member)) { char *configdir = osync_strdup_printf("%s%c%lli", group->configdir, G_DIR_SEPARATOR, osync_group_create_member_id(group)); @@ -777,20 +777,20 @@ osync_free(configdir); } - group->members = g_list_append(group->members, member); + group->members = osync_list_append(group->members, member); osync_member_ref(member); } void osync_group_remove_member(OSyncGroup *group, OSyncMember *member) { osync_assert(group); - group->members = g_list_remove(group->members, member); + group->members = osync_list_remove(group->members, member); osync_member_unref(member); } OSyncMember *osync_group_find_member(OSyncGroup *group, int id) { - GList *m = NULL; + OSyncList *m = NULL; for (m = group->members; m; m = m->next) { OSyncMember *member = m->data; if (osync_member_get_id(member) == id) @@ -802,13 +802,17 @@ OSyncMember *osync_group_nth_member(OSyncGroup *group, unsigned int nth) { osync_assert(group); - return (OSyncMember *)g_list_nth_data(group->members, nth); + return (OSyncMember *)osync_list_nth_data(group->members, nth); } unsigned int osync_group_num_members(OSyncGroup *group) { osync_assert(group); - return g_list_length(group->members); + return osync_list_length(group->members); +} + +OSyncList *osync_group_get_members(OSyncGroup *group) { + return osync_list_copy(group->members); } const char *osync_group_get_configdir(OSyncGroup *group) @@ -848,9 +852,34 @@ } +OSyncList *osync_group_get_objtypes(OSyncGroup *group) { + GList *list = osync_group_get_supported_objtypes(group); + OSyncList *new_list = NULL; + + if (list) { + OSyncList *last; + + new_list = osync_list_alloc(); + new_list->data = list->data; + new_list->prev = NULL; + last = new_list; + list = list->next; + while (list) { + last->next = osync_list_alloc(); + last->next->prev = last; + last = last->next; + last->data = list->data; + list = list->next; + } + last->next = NULL; + } + + return new_list; +} + void osync_group_set_objtype_enabled(OSyncGroup *group, const char *objtype, osync_bool enabled) { - GList *m = NULL; + OSyncList *m = NULL; osync_assert(group); /* Loop over all members... */ for (m = group->members; m; m = m->next) { @@ -861,7 +890,7 @@ int osync_group_objtype_enabled(OSyncGroup *group, const char *objtype) { - GList *m = NULL; + OSyncList *m = NULL; int enabled = -1; osync_assert(group); Modified: trunk/opensync/group/opensync_group.h ============================================================================== --- trunk/opensync/group/opensync_group.h Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_group.h Sun Mar 29 17:38:26 2009 (r5425) @@ -194,27 +194,16 @@ */ OSYNC_EXPORT OSyncMember *osync_group_find_member(OSyncGroup *group, int id); -/** @brief Returns the nth member of the group +/** + * @brief Returns a OSyncList that contains the OSyncMembers of this group * - * Returns a pointer to the nth member of the group - * - * @param group The group - * @param nth Which member to return - * @returns Pointer to the member - * - */ -OSYNC_EXPORT OSyncMember *osync_group_nth_member(OSyncGroup *group, unsigned int nth); - -/** @brief Counts the members of the group - * - * Returns the number of members in the group - * - * @param group The group - * @returns Number of members + * Please be aware that the returned list has to be freed with + * osync_list_free. If it isn't freed there will be a memory leak. * + * @param group A pointer to a OSyncGroup + * @return A shallow copy of the internal list of OSyncMembers */ -OSYNC_EXPORT unsigned int osync_group_num_members(OSyncGroup *group); - +OSYNC_EXPORT OSyncList *osync_group_get_members(OSyncGroup *group); /** @brief Returns the configdir for the group * @@ -235,23 +224,16 @@ */ OSYNC_EXPORT void osync_group_set_configdir(OSyncGroup *group, const char *directory); - -/** @brief Gets the number of object types of the group - * - * @param group The group - * @returns Number of object types of the group - * - */ -OSYNC_EXPORT unsigned int osync_group_num_objtypes(OSyncGroup *group); - -/** @brief Gets the nth object type of the group +/** + * @brief Returns a OSyncList that contains the objtype of this group * - * @param group The group - * @param nth The nth position of the object type list - * @returns Name of the nth object type of the group + * Please be aware that the returned list has to be freed with + * osync_list_free. If it isn't freed there will be a memory leak. * + * @param group A pointer to a OSyncGroup + * @return A shallow copy of the internal list of objtypes (const char*) */ -OSYNC_EXPORT const char *osync_group_nth_objtype(OSyncGroup *group, unsigned int nth); +OSYNC_EXPORT OSyncList *osync_group_get_objtypes(OSyncGroup *group); /** @brief Change the status of an object type in the group. * Modified: trunk/opensync/group/opensync_group_env.c ============================================================================== --- trunk/opensync/group/opensync_group_env.c Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_group_env.c Sun Mar 29 17:38:26 2009 (r5425) @@ -80,7 +80,7 @@ /* Free the groups */ while (env->groups) { osync_group_unref(env->groups->data); - env->groups = g_list_remove(env->groups, env->groups->data); + env->groups = osync_list_remove(env->groups, env->groups->data); } osync_free(env); @@ -183,7 +183,7 @@ OSyncGroup *osync_group_env_find_group(OSyncGroupEnv *env, const char *name) { - GList *g = NULL; + OSyncList *g = NULL; osync_assert(env); osync_assert(name); @@ -222,7 +222,7 @@ osync_free(configdir); } - env->groups = g_list_append(env->groups, group); + env->groups = osync_list_append(env->groups, group); osync_group_ref(group); return TRUE; @@ -233,18 +233,22 @@ osync_assert(env); osync_assert(group); - env->groups = g_list_remove(env->groups, group); + env->groups = osync_list_remove(env->groups, group); osync_group_unref(group); } int osync_group_env_num_groups(OSyncGroupEnv *env) { osync_assert(env); - return g_list_length(env->groups); + return osync_list_length(env->groups); } OSyncGroup *osync_group_env_nth_group(OSyncGroupEnv *env, int nth) { osync_assert(env); - return (OSyncGroup *)g_list_nth_data(env->groups, nth); + return (OSyncGroup *)osync_list_nth_data(env->groups, nth); +} + +OSyncList *osync_group_env_get_groups(OSyncGroupEnv *env) { + return osync_list_copy(env->groups); } Modified: trunk/opensync/group/opensync_group_env.h ============================================================================== --- trunk/opensync/group/opensync_group_env.h Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_group_env.h Sun Mar 29 17:38:26 2009 (r5425) @@ -106,26 +106,16 @@ */ OSYNC_EXPORT void osync_group_env_remove_group(OSyncGroupEnv *env, OSyncGroup *group); -/** @brief Counts the groups in the environment +/** + * @brief Returns a OSyncList that contains the OSyncGroups of this group env * - * Returns the number of groups - * - * @param env Pointer to a OSyncGroupEnv environment - * @returns Number of groups - * - */ -OSYNC_EXPORT int osync_group_env_num_groups(OSyncGroupEnv *env); - -/** @brief Returns the nth group - * - * Returns the nth groups from the environment - * - * @param env Pointer to a OSyncGroupEnv environment - * @param nth Which group to return - * @returns Pointer to the group + * Please be aware that the returned list has to be freed with + * osync_list_free. If it isn't freed there will be a memory leak. * + * @param env A pointer to a OSyncGroupEnv environment + * @return A shallow copy of the internal list of OSyncGroups */ -OSYNC_EXPORT OSyncGroup *osync_group_env_nth_group(OSyncGroupEnv *env, int nth); +OSYNC_EXPORT OSyncList *osync_group_env_get_groups(OSyncGroupEnv *env); /*@}*/ Modified: trunk/opensync/group/opensync_group_env_internals.h ============================================================================== --- trunk/opensync/group/opensync_group_env_internals.h Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_group_env_internals.h Sun Mar 29 17:38:26 2009 (r5425) @@ -31,10 +31,10 @@ * */ /*@{*/ -/*! @brief Represent a environment of groups that should be synchronized */ +/** @brief Represent a environment of groups that should be synchronized */ struct OSyncGroupEnv { /** list of groups */ - GList *groups; + OSyncList *groups; /** directory to store the groups */ char *groupsdir; @@ -42,6 +42,28 @@ int ref_count; }; +/** @brief Counts the groups in the environment + * + * Returns the number of groups + * + * @param env Pointer to a OSyncGroupEnv environment + * @returns Number of groups + * + */ +OSYNC_TEST_EXPORT int osync_group_env_num_groups(OSyncGroupEnv *env); + +/** @brief Returns the nth group + * + * Returns the nth groups from the environment + * + * @param env Pointer to a OSyncGroupEnv environment + * @param nth Which group to return + * @returns Pointer to the group + * + */ +OSYNC_TEST_EXPORT OSyncGroup *osync_group_env_nth_group(OSyncGroupEnv *env, int nth); + + /*@}*/ #endif /* _OPENSYNC_GROUP_ENV_INTERNALS_H_ */ Modified: trunk/opensync/group/opensync_group_internals.h ============================================================================== --- trunk/opensync/group/opensync_group_internals.h Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_group_internals.h Sun Mar 29 17:38:26 2009 (r5425) @@ -35,12 +35,12 @@ */ /*@{*/ -/*! @brief Represent a group of members that should be synchronized */ +/** @brief Represent a group of members that should be synchronized */ struct OSyncGroup { /** The name of the group */ char *name; /** The members of the group */ - GList *members; + OSyncList *members; /** The path, where the configuration resides */ char *configdir; /** The last time this group was synchronized successfully */ @@ -151,6 +151,45 @@ OSYNC_TEST_EXPORT void osync_group_set_schemadir(OSyncGroup *group, const char *schemadir); #endif /* OPENSYNC_UNITTESTS*/ +/** @brief Returns the nth member of the group + * + * Returns a pointer to the nth member of the group + * + * @param group The group + * @param nth Which member to return + * @returns Pointer to the member + * + */ +OSYNC_TEST_EXPORT OSyncMember *osync_group_nth_member(OSyncGroup *group, unsigned int nth); + +/** @brief Counts the members of the group + * + * Returns the number of members in the group + * + * @param group The group + * @returns Number of members + * + */ +OSYNC_TEST_EXPORT unsigned int osync_group_num_members(OSyncGroup *group); + +/** @brief Gets the number of object types of the group + * + * @param group The group + * @returns Number of object types of the group + * + */ +OSYNC_TEST_EXPORT unsigned int osync_group_num_objtypes(OSyncGroup *group); + +/** @brief Gets the nth object type of the group + * + * @param group The group + * @param nth The nth position of the object type list + * @returns Name of the nth object type of the group + * + */ +OSYNC_TEST_EXPORT const char *osync_group_nth_objtype(OSyncGroup *group, unsigned int nth); + + /*@}*/ #endif /* _OPENSYNC_GROUP_INTERNALS_H_ */ Modified: trunk/opensync/group/opensync_member.c ============================================================================== --- trunk/opensync/group/opensync_member.c Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_member.c Sun Mar 29 17:38:26 2009 (r5425) @@ -785,6 +785,34 @@ return osync_objtype_sink_get_name(sink); } +OSyncList *osync_member_get_objtypes(OSyncMember *member) { + GList *list = member->objtypes; + OSyncList *new_list = NULL; + OSyncObjTypeSink *sink = NULL; + + if (list) { + OSyncList *last; + + new_list = osync_list_alloc(); + sink = (OSyncObjTypeSink*)list->data; + new_list->data = (char *)osync_objtype_sink_get_name(sink); + new_list->prev = NULL; + last = new_list; + list = list->next; + while (list) { + last->next = osync_list_alloc(); + last->next->prev = last; + last = last->next; + sink = (OSyncObjTypeSink*)list->data; + last->data = (char *)osync_objtype_sink_get_name(sink); + list = list->next; + } + last->next = NULL; + } + + return new_list; +} + osync_bool osync_member_objtype_enabled(OSyncMember *member, const char *objtype) { OSyncObjTypeSink *sink = NULL; Modified: trunk/opensync/group/opensync_member.h ============================================================================== --- trunk/opensync/group/opensync_member.h Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_member.h Sun Mar 29 17:38:26 2009 (r5425) @@ -193,24 +193,16 @@ */ OSYNC_EXPORT long long int osync_member_get_id(OSyncMember *member); - -/** @brief Get the number of supported object types of this member - * - * @param member The member pointer - * @returns Number of supported object type of this member - * - */ -OSYNC_EXPORT int osync_member_num_objtypes(OSyncMember *member); - -/** @brief Get the name of the nth supported object type of this member +/** + * @brief Returns a OSyncList that contains the objtypes of this member * - * @param member The member pointer - * @param nth The nth position of the list of supported object types of this member - * @returns Name of the nth supported object type + * Please be aware that the returned list has to be freed with + * osync_list_free. If it isn't freed there will be a memory leak. * + * @param member A pointer to a OSyncMember + * @return A shallow copy of the internal list of objtypes (const char*) */ -OSYNC_EXPORT const char *osync_member_nth_objtype(OSyncMember *member, int nth); - +OSYNC_EXPORT OSyncList *osync_member_get_objtypes(OSyncMember *member); /** @brief Add an OSyncObjTypeSink object to the member list of supported object types of this member * Modified: trunk/opensync/group/opensync_member_internals.h ============================================================================== --- trunk/opensync/group/opensync_member_internals.h Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_member_internals.h Sun Mar 29 17:38:26 2009 (r5425) @@ -120,6 +120,24 @@ OSYNC_TEST_EXPORT void osync_member_set_schemadir(OSyncMember *member, const char *schemadir); #endif +/** @brief Get the number of supported object types of this member + * + * @param member The member pointer + * @returns Number of supported object type of this member + * + */ +OSYNC_TEST_EXPORT int osync_member_num_objtypes(OSyncMember *member); + +/** @brief Get the name of the nth supported object type of this member + * + * @param member The member pointer + * @param nth The nth position of the list of supported object types of this member + * @returns Name of the nth supported object type + * + */ +OSYNC_TEST_EXPORT const char *osync_member_nth_objtype(OSyncMember *member, int nth); + + /*@}*/ #endif /* _OPENSYNC_MEMBER_INTERNALS_H_ */ Modified: trunk/opensync/group/opensync_updater.c ============================================================================== --- trunk/opensync/group/opensync_updater.c Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/opensync/group/opensync_updater.c Sun Mar 29 17:38:26 2009 (r5425) @@ -44,6 +44,8 @@ #include "opensync_updater_private.h" #include "opensync_updater_internals.h" +#include "opensync_group_internals.h" + static void osync_updater_set_error(OSyncUpdater *updater, OSyncError *error) { osync_assert(updater); Modified: trunk/tests/group-tests/check_group.c ============================================================================== --- trunk/tests/group-tests/check_group.c Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/tests/group-tests/check_group.c Sun Mar 29 17:38:26 2009 (r5425) @@ -5,6 +5,7 @@ #include <opensync/opensync_internals.h> #include "opensync/group/opensync_group_internals.h" +#include "opensync/group/opensync_group_env_internals.h" START_TEST (group_last_sync) { Modified: trunk/tests/support.c ============================================================================== --- trunk/tests/support.c Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/tests/support.c Sun Mar 29 17:38:26 2009 (r5425) @@ -5,6 +5,7 @@ #include "opensync/engine/opensync_engine_internals.h" #include "opensync/archive/opensync_archive_internals.h" +#include "opensync/group/opensync_group_internals.h" char *olddir = NULL; Modified: trunk/tests/sync-tests/check_sync.c ============================================================================== --- trunk/tests/sync-tests/check_sync.c Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/tests/sync-tests/check_sync.c Sun Mar 29 17:38:26 2009 (r5425) @@ -7,6 +7,7 @@ #include <opensync/opensync-mapping.h> #include "opensync/group/opensync_group_internals.h" +#include "opensync/group/opensync_member_internals.h" #include "opensync/engine/opensync_engine_internals.h" START_TEST (sync_setup_connect) Modified: trunk/tools/osyncdump.c ============================================================================== --- trunk/tools/osyncdump.c Sun Mar 29 16:50:05 2009 (r5424) +++ trunk/tools/osyncdump.c Sun Mar 29 17:38:26 2009 (r5425) @@ -88,25 +88,27 @@ { OSyncGroup *group = osync_group_env_find_group(env, groupname); - int i, num_objtypes; + int num_objtypes; if (!group) { printf("Unable to find group with name \"%s\"\n", groupname); return; } - - num_objtypes = osync_group_num_objtypes(group); + + OSyncList *objtypes = osync_group_get_objtypes(group); + num_objtypes = osync_list_length(objtypes); if (num_objtypes == 0) { printf("Group has no objtypes. Have the objtypes already been discovered?\n"); return; } - for (i = 0; i < num_objtypes; i++) { - const char *objtype = osync_group_nth_objtype(group, i); + OSyncList *o; + for (o = objtypes; o; o = o->next) { + const char *objtype = (char *) o->data; printf("Mappings for objtype \"%s\":\n", objtype); dump_map_objtype(env, objtype, groupname); } - + osync_list_free(objtypes); } #if 0 |