#define DEFAULT_FILE_ARRAY_SIZE 1
+#define NET_URL_PREFIX "net://"
+#define NET4_URL_PREFIX "net4://"
+#define NET6_URL_PREFIX "net6://"
+
static char *opt_input_format, *opt_output_format;
/*
{
int ret = 0, trace_ids = 0;
+ if ((strncmp(path, NET4_URL_PREFIX, sizeof(NET4_URL_PREFIX) - 1)) == 0 ||
+ (strncmp(path, NET6_URL_PREFIX, sizeof(NET6_URL_PREFIX) - 1)) == 0 ||
+ (strncmp(path, NET_URL_PREFIX, sizeof(NET_URL_PREFIX) - 1)) == 0) {
+ ret = bt_context_add_trace(ctx,
+ path, format_str, packet_seek, NULL, NULL);
+ if (ret < 0) {
+ fprintf(stderr, "[warning] [Context] cannot open trace \"%s\" "
+ "for reading.\n", path);
+ /* Allow to skip erroneous traces. */
+ ret = 1; /* partial error */
+ }
+ return ret;
+ }
/* Should lock traversed_paths mutex here if used in multithread */
traversed_paths = g_ptr_array_new();
}
}
fmt_read = bt_lookup_format(g_quark_from_static_string(opt_input_format));
- if (!fmt_read || fmt_read->name != g_quark_from_static_string("ctf")) {
+ if (!fmt_read) {
fprintf(stderr, "[error] Format \"%s\" is not supported.\n\n",
opt_input_format);
partial_error = 1;
goto error_copy_trace;
}
- ret = convert_trace(td_write, ctx);
- if (ret) {
- fprintf(stderr, "Error printing trace.\n\n");
- goto error_copy_trace;
+ /* For now, we support only CTF iterators */
+ if (fmt_read->name == g_quark_from_static_string("ctf")) {
+ ret = convert_trace(td_write, ctx);
+ if (ret) {
+ fprintf(stderr, "Error printing trace.\n\n");
+ goto error_copy_trace;
+ }
}
ret = trace_post_handler(td_write, ctx);
if (ret != 0)
goto error;
- ret = fmt->convert_index_timestamp(td);
- if (ret < 0)
- goto error;
+ if (fmt->convert_index_timestamp) {
+ ret = fmt->convert_index_timestamp(td);
+ if (ret < 0)
+ goto error;
+ }
- handle->real_timestamp_begin = fmt->timestamp_begin(td, handle, BT_CLOCK_REAL);
- handle->real_timestamp_end = fmt->timestamp_end(td, handle, BT_CLOCK_REAL);
- handle->cycles_timestamp_begin = fmt->timestamp_begin(td, handle, BT_CLOCK_CYCLES);
- handle->cycles_timestamp_end = fmt->timestamp_end(td, handle, BT_CLOCK_CYCLES);
+ if (fmt->timestamp_begin)
+ handle->real_timestamp_begin = fmt->timestamp_begin(td,
+ handle, BT_CLOCK_REAL);
+ if (fmt->timestamp_end)
+ handle->real_timestamp_end = fmt->timestamp_end(td, handle,
+ BT_CLOCK_REAL);
+ if (fmt->timestamp_begin)
+ handle->cycles_timestamp_begin = fmt->timestamp_begin(td,
+ handle, BT_CLOCK_CYCLES);
+ if (fmt->timestamp_end)
+ handle->cycles_timestamp_end = fmt->timestamp_end(td, handle,
+ BT_CLOCK_CYCLES);
return handle->id;
{
int ret;
+ if (!handle->td->ctx)
+ return;
/* Remove from containers */
bt_trace_collection_remove(handle->td->ctx->tc, handle->td);
/* Close the trace */