Changeset 3510

Show
Ignore:
Timestamp:
08/06/08 08:50:37 (4 months ago)
Author:
dgollub
Message:

Fixes issue with wrong refcounting of handled objformats.
Moved common database parser into syncml_common.c

TODO: Handle all available objformats for SmlDatabase? - currentyl

the SyncML plugins handles only ONE objformat.

Location:
plugins/syncml/src
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • plugins/syncml/src/syncml_common.c

    r3509 r3510  
    238238} 
    239239 
    240 SmlDatabase *syncml_config_parse_database(SmlPluginEnv *env, OSyncPluginResource *res, OSyncError **error) 
    241 { 
    242         osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, res, error); 
     240SmlDatabase *syncml_config_parse_database(SmlPluginEnv *env, OSyncPluginInfo *info, OSyncObjTypeSink *sink, OSyncError **error) 
     241{ 
     242        osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, env, info, sink, error); 
    243243        g_assert(env); 
     244        g_assert(info); 
     245        g_assert(sink); 
     246 
     247        OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); 
     248        OSyncPluginConfig *config = osync_plugin_info_get_config(info); 
     249        const char *objtype = osync_objtype_sink_get_name(sink); 
     250        g_assert(objtype); 
     251        OSyncPluginResource *res = osync_plugin_config_find_active_resource(config, objtype);  
    244252        g_assert(res); 
    245253 
     
    249257 
    250258        database->env = env; 
     259        database->sink = sink; 
    251260        database->syncChanges = NULL; 
    252261        database->syncContexts = NULL; 
     
    263272                goto error_free_database; 
    264273        } 
     274 
     275        /* TODO: Handle all available format sinks! */ 
     276        OSyncList *fs = osync_plugin_resource_get_objformat_sinks(res); 
     277        OSyncObjFormatSink *fmtsink = osync_list_nth_data(fs, 0); 
     278        const char *objformat = osync_objformat_sink_get_objformat(fmtsink); 
     279 
     280        database->objformat = osync_format_env_find_objformat(formatenv, objformat); 
     281        osync_objformat_ref(database->objformat); 
     282 
     283        g_assert(database->objformat); 
     284 
     285        env->databases = g_list_append(env->databases, database); 
    265286 
    266287        osync_trace(TRACE_EXIT, "%s: %p", __func__, database); 
  • plugins/syncml/src/syncml_common.h

    r3509 r3510  
    205205SmlDatabase *syncml_config_parse_database( 
    206206                        SmlPluginEnv *env, 
    207                         OSyncPluginResource *res, 
     207                        OSyncPluginInfo *info, 
     208                        OSyncObjTypeSink *sink, 
    208209                        OSyncError **error); 
    209210 
  • plugins/syncml/src/syncml_ds_client.c

    r3509 r3510  
    22#include "syncml_callbacks.h" 
    33 
    4 SmlBool ds_client_init_databases(SmlPluginEnv *env, OSyncPluginInfo *info, OSyncError **error) 
     4SmlBool ds_client_init_databases(SmlPluginEnv *env, OSyncPluginInfo *info, OSyncObjTypeSink *sink, OSyncError **error) 
    55{ 
    66        SmlDatabase *database = NULL; 
    77        OSyncPluginConfig *config = osync_plugin_info_get_config(info); 
     8        OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); 
    89        unsigned int i, num_objtypes = osync_plugin_info_num_objtypes(info); 
    910 
     
    2223 
    2324                OSyncPluginResource *res = osync_plugin_config_find_active_resource(config, objtype); 
    24                 if (!(database = syncml_config_parse_database(env, res, error))) 
     25                if (!syncml_config_parse_database(env, formatenv, res, error)) 
    2526                        goto error; 
    2627                 
  • plugins/syncml/src/syncml_ds_server.c

    r3499 r3510  
    55{ 
    66        SmlDatabase *database = NULL; 
    7         OSyncPluginConfig *config = osync_plugin_info_get_config(info); 
    8         OSyncFormatEnv *formatenv = osync_plugin_info_get_format_env(info); 
    97        unsigned int i, num_objtypes = osync_plugin_info_num_objtypes(info); 
    108 
     
    2018                functions.batch_commit = ds_server_batch_commit; 
    2119 
    22                 OSyncPluginRessource *res = osync_plugin_config_find_active_ressource(config, objtype); 
    23                 if (!(database = syncml_config_parse_database(env, res, error))) 
     20                if (!(database = syncml_config_parse_database(env, info, sink, error))) 
    2421                        goto error; 
    2522                 
    26                 database->sink = sink; 
    27  
    28                 /* TODO: Handle all available format sinks! */ 
    29                 OSyncList *fs = osync_plugin_ressource_get_objformat_sinks(res); 
    30                 OSyncObjFormatSink *fmtsink = osync_list_nth_data(fs, 0); 
    31                 const char *objformat = osync_objformat_sink_get_objformat(fmtsink); 
    32  
    33                 database->objformat = osync_format_env_find_objformat(formatenv, objformat); 
    34  
    35                 g_assert(database->objformat); 
    36  
    3723                osync_objtype_sink_set_functions(sink, functions, database); 
    38  
    39                 env->databases = g_list_append(env->databases, database); 
    4024        } 
    4125        return TRUE;