22 #include "opensync_internals.h"
29 static osync_bool target_fn_fmtnames(
const void *data,
OSyncObjFormat *fmt)
31 const char *
const *list = data;
32 const char *
const *i;
33 for (i = list; *i; i++) {
34 if (!strcmp(fmt->name, *i))
47 static osync_bool target_fn_simple(
const void *data,
OSyncObjFormat *fmt)
57 static osync_bool target_fn_fmtname(
const void *data,
OSyncObjFormat *fmt)
59 const char *name = data;
60 return !strcmp(name, fmt->name);
67 static osync_bool target_fn_membersink(
const void *data,
OSyncObjFormat *fmt)
71 for (i = memb->format_sinks; i; i = i->next) {
72 OSyncObjFormatSink *sink = i->data;
73 if (sink->format == fmt)
106 if (!format->print_func)
107 return g_strndup(change->
data, change->
size);
109 return format->print_func(change);
125 osync_error_set(error, OSYNC_ERROR_GENERIC,
"No data set when asking for the timestamp");
133 if (!format->revision_func) {
134 osync_error_set(error, OSYNC_ERROR_GENERIC,
"No revision function set");
139 time_t time = format->revision_func(change, error);
161 g_assert(rightchange);
162 g_assert(leftchange);
168 osync_trace(
TRACE_EXIT,
"osync_change_compare_data: MISMATCH: Could not convert leftchange to common format");
174 osync_trace(
TRACE_EXIT,
"osync_change_compare_data: MISMATCH: Could not convert rightchange to common format");
178 if (!(rightchange->
data == leftchange->
data)) {
187 if (!rightchange->
data || !leftchange->
data) {
221 g_assert(rightchange);
222 g_assert(leftchange);
228 osync_trace(
TRACE_EXIT,
"osync_change_compare: MISMATCH: Could not convert leftchange to common format");
234 osync_trace(
TRACE_EXIT,
"osync_change_compare: MISMATCH: Could not convert leftchange to common format");
275 if (!format || !format->copy_func) {
277 target->
data = g_malloc0(
sizeof(
char) * (source->
size + 1));
284 if (!format->copy_func(source->
data, source->
size, &(target->
data), &(target->
size))) {
285 osync_error_set(error, OSYNC_ERROR_GENERIC,
"Something went wrong during copying");
308 newchange->
uid = g_strdup(source->
uid);
309 newchange->
hash = g_strdup(source->
hash);
342 osync_debug(
"OSCONV", 3,
"Duplicating change %s with format %s\n", change->
uid, format->name);
343 if (!format || !format->duplicate_func)
345 format->duplicate_func(change);
365 osync_trace(
TRACE_ENTRY,
"osync_change_convert(%p, %p, %p:%s, %s, %p)", env, change, targetformat, targetformat ? targetformat->name :
"NONE", extension_name, error);
366 if (osync_conv_convert_fn(env, change, target_fn_simple, targetformat, extension_name, error)) {
404 osync_error_set(error, OSYNC_ERROR_GENERIC,
"The change has no objtype");
440 return osync_conv_convert_fn(env, change, target_fn_fmtname, targetname, NULL, error);
457 return osync_conv_convert_fn(env, change, target_fn_fmtnames, targetnames, NULL, error);
472 if (!osync_member_require_sink_info(member, error))
475 return osync_conv_convert_fn(env, change, target_fn_membersink, member, member->extension, error);
494 return format->objtype;
514 return format->objtype;
543 if (converter->detect_func && converter->detect_func(env, change->
data, change->
size)) {
544 osync_trace(
TRACE_EXIT,
"osync_change_detect_objformat: %p:%s", converter->target_format, converter->target_format->name);
545 return converter->target_format;
550 osync_error_set(error, OSYNC_ERROR_GENERIC,
"None of the detectors was able to recognize this data");
582 if (!strcmp(converter->source_format->name,
osync_change_get_objformat(change)->name) && converter->type == CONVERTER_DECAP) {
583 osync_bool free_output = FALSE;
584 if (!(new_change = osync_converter_invoke_decap(converter, new_change, &free_output))) {
585 osync_error_set(error, OSYNC_ERROR_GENERIC,
"Unable to decap the change");