return ret;
}
-static
-struct bt_ctf_iter *iter_create_intersect(struct bt_context *ctx,
- struct bt_iter_pos **inter_begin_pos,
- struct bt_iter_pos **inter_end_pos)
-{
- uint64_t begin = 0, end = ULLONG_MAX;
- int ret;
-
- ret = ctf_find_packets_intersection(ctx, &begin, &end);
- if (ret == 1) {
- fprintf(stderr, "[error] No intersection found between trace files.\n");
- goto error;
- } else if (ret != 0) {
- goto error;
- }
- *inter_begin_pos = bt_iter_create_time_pos(NULL, begin);
- if (!(*inter_begin_pos)) {
- goto error;
- }
- *inter_end_pos = bt_iter_create_time_pos(NULL, end);
- if (!(*inter_end_pos)) {
- goto error;
- }
-
- /*
- * bt_ctf_iter does not take ownership of begin and end positions,
- * so we return them to the caller who must still assume their ownership
- * until the iterator is destroyed.
- */
- return bt_ctf_iter_create(ctx, *inter_begin_pos,
- *inter_end_pos);
-error:
- return NULL;
-}
-
static
int convert_trace(struct bt_trace_descriptor *td_write,
struct bt_context *ctx)
}
if (opt_stream_intersection) {
- iter = iter_create_intersect(ctx, &begin_pos, &end_pos);
+ iter = bt_ctf_iter_create_intersect(ctx, &begin_pos, &end_pos);
} else {
begin_pos = bt_iter_create_time_pos(NULL, 0);
begin_pos->type = BT_SEEK_BEGIN;
return iter;
}
+struct bt_ctf_iter *bt_ctf_iter_create_intersect(struct bt_context *ctx,
+ struct bt_iter_pos **inter_begin_pos,
+ struct bt_iter_pos **inter_end_pos)
+{
+ uint64_t begin = 0, end = ULLONG_MAX;
+ int ret;
+
+ ret = ctf_find_packets_intersection(ctx, &begin, &end);
+ if (ret == 1) {
+ fprintf(stderr, "[error] No intersection found between trace files.\n");
+ goto error;
+ } else if (ret != 0) {
+ goto error;
+ }
+ *inter_begin_pos = bt_iter_create_time_pos(NULL, begin);
+ if (!(*inter_begin_pos)) {
+ goto error;
+ }
+ *inter_end_pos = bt_iter_create_time_pos(NULL, end);
+ if (!(*inter_end_pos)) {
+ goto error;
+ }
+
+ /*
+ * bt_ctf_iter does not take ownership of begin and end positions,
+ * so we return them to the caller who must still assume their ownership
+ * until the iterator is destroyed.
+ */
+ return bt_ctf_iter_create(ctx, *inter_begin_pos,
+ *inter_end_pos);
+error:
+ return NULL;
+}
+
+
void bt_ctf_iter_destroy(struct bt_ctf_iter *iter)
{
struct bt_stream_callbacks *bt_stream_cb;
const struct bt_iter_pos *begin_pos,
const struct bt_iter_pos *end_pos);
+ /*
+ * bt_ctf_iter_create_intersect - Allocate a CTF trace collection
+ * iterator corresponding to the timerange when all streams are active
+ * simultaneously.
+ *
+ * On success, return a pointer to the newly allocated iterator. The
+ * out parameters inter_begin_pos and inter_end_pos are also set to
+ * correspond to the beginning and end of the intersection,
+ * respectively.
+ *
+ * On failure, return NULL.
+ */
+struct bt_ctf_iter *bt_ctf_iter_create_intersect(struct bt_context *ctx,
+ struct bt_iter_pos **inter_begin_pos,
+ struct bt_iter_pos **inter_end_pos);
+
/*
* bt_ctf_get_iter - get iterator from ctf iterator.
*/