tap-driver.sh: flush stdout after each test result
[babeltrace.git] / plugins / ctf / fs-src / data-stream-file.c
index e1041151e6aa094108ce4a9fc86612a456b6cebd..99d3b472b58838fa884750bd0f4cbe66cd207d37 100644 (file)
 #include <stdbool.h>
 #include <glib.h>
 #include <inttypes.h>
-#include <babeltrace/compat/mman-internal.h>
-#include <babeltrace/endian-internal.h>
-#include <babeltrace/babeltrace.h>
-#include <babeltrace/common-internal.h>
+#include <babeltrace2/compat/mman-internal.h>
+#include <babeltrace2/endian-internal.h>
+#include <babeltrace2/babeltrace.h>
+#include <babeltrace2/common-internal.h>
 #include "file.h"
 #include "metadata.h"
 #include "../common/msg-iter/msg-iter.h"
-#include <babeltrace/assert-internal.h>
+#include <babeltrace2/assert-internal.h>
 #include "data-stream-file.h"
 #include <string.h>
 
@@ -256,40 +256,6 @@ struct bt_msg_iter_medium_ops ctf_fs_ds_file_medops = {
        .seek = medop_seek,
 };
 
-static
-struct ctf_fs_ds_index *ctf_fs_ds_index_create(size_t length)
-{
-       struct ctf_fs_ds_index *index = g_new0(struct ctf_fs_ds_index, 1);
-
-       if (!index) {
-               BT_LOGE_STR("Failed to allocate index");
-               goto error;
-       }
-
-       index->entries = g_array_sized_new(FALSE, TRUE,
-                       sizeof(struct ctf_fs_ds_index_entry), length);
-       if (!index->entries) {
-               BT_LOGE("Failed to allocate %zu index entries.", length);
-               goto error;
-       }
-       g_array_set_size(index->entries, length);
-end:
-       return index;
-error:
-       ctf_fs_ds_index_destroy(index);
-       goto end;
-}
-
-/* Returns a new, zeroed, index entry. */
-static
-struct ctf_fs_ds_index_entry *ctf_fs_ds_index_add_new_entry(
-               struct ctf_fs_ds_index *index)
-{
-       g_array_set_size(index->entries, index->entries->len + 1);
-       return &g_array_index(index->entries, struct ctf_fs_ds_index_entry,
-                       index->entries->len - 1);
-}
-
 static
 int convert_cycles_to_ns(struct ctf_clock_class *clock_class,
                uint64_t cycles, int64_t *ns)
@@ -400,13 +366,11 @@ struct ctf_fs_ds_index *build_index_from_idx_file(
                goto error;
        }
 
-       index = ctf_fs_ds_index_create(file_entry_count);
+       index = ctf_fs_ds_index_create();
        if (!index) {
                goto error;
        }
 
-       index_entry = (struct ctf_fs_ds_index_entry *) &g_array_index(
-                       index->entries, struct ctf_fs_ds_index_entry, 0);
        for (i = 0; i < file_entry_count; i++) {
                struct ctf_packet_index *file_index =
                                (struct ctf_packet_index *) file_pos;
@@ -417,6 +381,11 @@ struct ctf_fs_ds_index *build_index_from_idx_file(
                        goto error;
                }
 
+               index_entry = g_new0(struct ctf_fs_ds_index_entry, 1);
+               if (!index_entry) {
+                       goto error;
+               }
+
                /* Convert size in bits to bytes. */
                packet_size /= CHAR_BIT;
                index_entry->packet_size = packet_size;
@@ -457,7 +426,8 @@ struct ctf_fs_ds_index *build_index_from_idx_file(
 
                total_packets_size += packet_size;
                file_pos += file_index_entry_size;
-               index_entry++;
+
+               g_ptr_array_add(index->entries, index_entry);
        }
 
        /* Validate that the index addresses the complete stream. */
@@ -480,6 +450,7 @@ end:
        return index;
 error:
        ctf_fs_ds_index_destroy(index);
+       g_free(index_entry);
        index = NULL;
        goto end;
 }
@@ -490,7 +461,7 @@ int init_index_entry(struct ctf_fs_ds_index_entry *entry,
                struct bt_msg_iter_packet_properties *props,
                off_t packet_size, off_t packet_offset)
 {
-       int ret;
+       int ret = 0;
        struct ctf_stream_class *sc;
 
        sc = ctf_trace_class_borrow_stream_class_by_id(ds_file->metadata->tc,
@@ -536,19 +507,19 @@ struct ctf_fs_ds_index *build_index_from_stream_file(
 {
        int ret;
        struct ctf_fs_ds_index *index = NULL;
-       enum bt_msg_iter_status iter_status;
+       enum bt_msg_iter_status iter_status = BT_MSG_ITER_STATUS_OK;
        off_t current_packet_offset_bytes = 0;
 
        BT_LOGD("Indexing stream file %s", ds_file->file->path->str);
 
-       index = ctf_fs_ds_index_create(0);
+       index = ctf_fs_ds_index_create();
        if (!index) {
                goto error;
        }
 
        do {
                off_t current_packet_size_bytes;
-               struct ctf_fs_ds_index_entry *entry;
+               struct ctf_fs_ds_index_entry *index_entry;
                struct bt_msg_iter_packet_properties props;
 
                if (current_packet_offset_bytes < 0) {
@@ -593,22 +564,27 @@ struct ctf_fs_ds_index *build_index_from_stream_file(
                        goto error;
                }
 
-               current_packet_offset_bytes += current_packet_size_bytes;
-               BT_LOGD("Seeking to next packet: current-packet-offset=%jd, "
-                       "next-packet-offset=%jd",
-                       current_packet_offset_bytes - current_packet_size_bytes,
-                       current_packet_offset_bytes);
-               entry = ctf_fs_ds_index_add_new_entry(index);
-               if (!entry) {
+               index_entry = g_new0(struct ctf_fs_ds_index_entry, 1);
+               if (!index_entry) {
                        BT_LOGE_STR("Failed to allocate a new index entry.");
                        goto error;
                }
 
-               ret = init_index_entry(entry, ds_file, &props,
+               ret = init_index_entry(index_entry, ds_file, &props,
                        current_packet_size_bytes, current_packet_offset_bytes);
                if (ret) {
+                       g_free(index_entry);
                        goto error;
                }
+
+               g_ptr_array_add(index->entries, index_entry);
+
+               current_packet_offset_bytes += current_packet_size_bytes;
+               BT_LOGD("Seeking to next packet: current-packet-offset=%jd, "
+                       "next-packet-offset=%jd",
+                       current_packet_offset_bytes - current_packet_size_bytes,
+                       current_packet_offset_bytes);
+
        } while (iter_status == BT_MSG_ITER_STATUS_OK);
 
        if (iter_status != BT_MSG_ITER_STATUS_OK) {
@@ -691,6 +667,31 @@ end:
        return index;
 }
 
+BT_HIDDEN
+struct ctf_fs_ds_index *ctf_fs_ds_index_create()
+{
+       struct ctf_fs_ds_index *index = g_new0(struct ctf_fs_ds_index, 1);
+
+       if (!index) {
+               BT_LOGE_STR("Failed to allocate index");
+               goto error;
+       }
+
+       index->entries = g_ptr_array_new_with_free_func((GDestroyNotify) g_free);
+       if (!index->entries) {
+               BT_LOGE("Failed to allocate index entries.");
+               goto error;
+       }
+
+       goto end;
+
+error:
+       ctf_fs_ds_index_destroy(index);
+       index = NULL;
+end:
+       return index;
+}
+
 BT_HIDDEN
 void ctf_fs_ds_file_destroy(struct ctf_fs_ds_file *ds_file)
 {
@@ -750,7 +751,7 @@ void ctf_fs_ds_index_destroy(struct ctf_fs_ds_index *index)
        }
 
        if (index->entries) {
-               g_array_free(index->entries, TRUE);
+               g_ptr_array_free(index->entries, TRUE);
        }
        g_free(index);
 }
This page took 0.025614 seconds and 4 git commands to generate.