void osync_context_report_uid_update(OSyncContext *context, const char *olduid, const char *newuid)
{
	osync_trace(TRACE_ENTRY, "%s(%p, %s, %s)", __func__, context, __NULLSTR(olduid), __NULLSTR(newuid));

	osync_return_if_fail(context);
	osync_return_if_fail(olduid);
	osync_return_if_fail(newuid);

	context->uid_update_function(olduid, newuid, context->uid_update_sink, context->uid_update_data);

	osync_trace(TRACE_EXIT, "%s", __func__);
}
/*! @brief Sets a error from a va_list
 * 
 * @param error A pointer to a error struct
 * @param type The type to set
 * @param format The message
 * @param args The arguments to the message
 * 
 */
void osync_error_set_vargs(OSyncError **error, OSyncErrorType type, const char *format, va_list args)
{
  osync_return_if_fail(error);
  osync_return_if_fail(osync_error_is_set(error) == FALSE);
  osync_return_if_fail(format);

  *error = g_malloc0(sizeof(OSyncError));
  (*error)->message = g_strdup_vprintf(format, args);
  (*error)->type = type;
  (*error)->ref_count = 1;

  osync_trace(TRACE_ERROR, "%s", (*error)->message);
	
  return;
}
void osync_error_set_vargs(OSyncError **error, OSyncErrorType type, const char *format, va_list args)
{
	osync_return_if_fail(error);
	osync_return_if_fail(format);

	// save any existing error, in case it needs to be added as a child
	OSyncError *old_error = *error;

	// create new error object in user's pointer variable
	*error = g_malloc0(sizeof(OSyncError));
	(*error)->message = g_strdup_vprintf(format, args);
	(*error)->type = type;
	(*error)->ref_count = 1;

	// tack on the old error as the child
	(*error)->child = old_error;

	osync_trace(TRACE_ERROR, "%s", (*error)->message);
	
	return;
}
void osync_merger_unref(OSyncMerger *merger)
{
	osync_return_if_fail(merger);
	
	if (g_atomic_int_dec_and_test(&(merger->ref_count))) {
		if (merger->objformat) {
			osync_free(merger->objformat);
		}
			
		if (merger->capsformat) {
			osync_free(merger->capsformat);
		}

		osync_free(merger);
	}
}
void
osync_list_free_1 (OSyncList *list)
{
	osync_return_if_fail(list);
	_osync_list_free1 (list);
}
void
osync_list_free (OSyncList *list)
{
	osync_return_if_fail(list);
	g_slice_free_chain (OSyncList, list, next);
}
void osync_merger_set_demerge_func(OSyncMerger *merger, OSyncMergerDemergeFunc demerge_func)
{
	osync_return_if_fail(merger);
	merger->demerge_func = demerge_func;
}
void osync_merger_set_merge_func(OSyncMerger *merger, OSyncMergerMergeFunc merge_func)
{
	osync_return_if_fail(merger);
	merger->merge_func = merge_func;
}
void osync_merger_set_finalize_func(OSyncMerger *merger, OSyncMergerFinalizeFunc finalize_func)
{
	osync_return_if_fail(merger);
	merger->finalize_func = finalize_func;
}
void osync_merger_set_initialize_func(OSyncMerger *merger, OSyncMergerInitializeFunc initialize_func)
{
	osync_return_if_fail(merger);
	merger->initialize_func = initialize_func;
}