src.ctf.fs: move internal util to ctf/common/utils
[babeltrace.git] / plugins / ctf / fs-src / fs.c
index 409a3dd4caa9857bafeaa3abe098b5098b0dc165..32121b7360ec51117e15b93c7941d802018df5c5 100644 (file)
@@ -48,6 +48,7 @@
 #include "file.h"
 #include "../common/metadata/decoder.h"
 #include "../common/notif-iter/notif-iter.h"
+#include "../common/utils/utils.h"
 #include "query.h"
 
 #define BT_LOG_TAG "PLUGIN-CTF-FS-SRC"
@@ -193,7 +194,7 @@ enum bt_notification_iterator_status ctf_fs_iterator_init(
        }
 
        ret = bt_private_notification_iterator_set_user_data(it, notif_iter_data);
-       if (ret) {
+       if (ret != BT_NOTIFICATION_ITERATOR_STATUS_OK) {
                goto error;
        }
 
@@ -203,10 +204,6 @@ enum bt_notification_iterator_status ctf_fs_iterator_init(
 error:
        (void) bt_private_notification_iterator_set_user_data(it, NULL);
 
-       if (ret == BT_NOTIFICATION_ITERATOR_STATUS_OK) {
-               ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR;
-       }
-
 end:
        ctf_fs_notif_iter_data_destroy(notif_iter_data);
        return ret;
@@ -377,6 +374,7 @@ end:
        return ret;
 }
 
+static
 uint64_t get_packet_header_stream_instance_id(struct ctf_fs_trace *ctf_fs_trace,
                struct bt_ctf_field *packet_header_field)
 {
@@ -406,51 +404,6 @@ end:
        return stream_instance_id;
 }
 
-struct bt_ctf_stream_class *stream_class_from_packet_header(
-               struct ctf_fs_trace *ctf_fs_trace,
-               struct bt_ctf_field *packet_header_field)
-{
-       struct bt_ctf_field *stream_id_field = NULL;
-       struct bt_ctf_stream_class *stream_class = NULL;
-       uint64_t stream_id = -1ULL;
-       int ret;
-
-       if (!packet_header_field) {
-               goto single_stream_class;
-       }
-
-       stream_id_field = bt_ctf_field_structure_get_field_by_name(
-               packet_header_field, "stream_id");
-       if (!stream_id_field) {
-               goto single_stream_class;
-       }
-
-       ret = bt_ctf_field_unsigned_integer_get_value(stream_id_field,
-               &stream_id);
-       if (ret) {
-               stream_id = -1ULL;
-       }
-
-       if (stream_id == -1ULL) {
-single_stream_class:
-               /* Single stream class */
-               if (bt_ctf_trace_get_stream_class_count(
-                               ctf_fs_trace->metadata->trace) == 0) {
-                       goto end;
-               }
-
-               stream_class = bt_ctf_trace_get_stream_class_by_index(
-                       ctf_fs_trace->metadata->trace, 0);
-       } else {
-               stream_class = bt_ctf_trace_get_stream_class_by_id(
-                       ctf_fs_trace->metadata->trace, stream_id);
-       }
-
-end:
-       bt_put(stream_id_field);
-       return stream_class;
-}
-
 uint64_t get_packet_context_timestamp_begin_ns(
                struct ctf_fs_trace *ctf_fs_trace,
                struct bt_ctf_field *packet_context_field)
@@ -601,6 +554,26 @@ end:
        return ds_file_group;
 }
 
+/* Replace by g_ptr_array_insert when we depend on glib >= 2.40. */
+static
+void array_insert(GPtrArray *array, gpointer element, size_t pos)
+{
+       size_t original_array_len = array->len;
+
+       /* Allocate an unused element at the end of the array. */
+       g_ptr_array_add(array, NULL);
+
+       /* If we are not inserting at the end, move the elements by one. */
+       if (pos < original_array_len) {
+               memmove(&(array->pdata[pos + 1]),
+                       &(array->pdata[pos]),
+                       (original_array_len - pos) * sizeof(gpointer));
+       }
+
+       /* Insert the value and bump the array len */
+       array->pdata[pos] = element;
+}
+
 static
 int ctf_fs_ds_file_group_add_ds_file_info(
                struct ctf_fs_ds_file_group *ds_file_group,
@@ -628,12 +601,7 @@ int ctf_fs_ds_file_group_add_ds_file_info(
                }
        }
 
-       if (i == ds_file_group->ds_file_infos->len) {
-               /* Append instead */
-               i = -1;
-       }
-
-       g_ptr_array_insert(ds_file_group->ds_file_infos, i, ds_file_info);
+       array_insert(ds_file_group->ds_file_infos, ds_file_info, i);
        ds_file_info = NULL;
        goto end;
 
@@ -686,8 +654,8 @@ int add_ds_file_to_ds_file_group(struct ctf_fs_trace *ctf_fs_trace,
                packet_header_field);
        begin_ns = get_packet_context_timestamp_begin_ns(ctf_fs_trace,
                packet_context_field);
-       stream_class = stream_class_from_packet_header(ctf_fs_trace,
-               packet_header_field);
+       stream_class = ctf_utils_stream_class_from_packet_header(
+               ctf_fs_trace->metadata->trace, packet_header_field);
        if (!stream_class) {
                goto error;
        }
@@ -898,7 +866,7 @@ int create_ds_file_groups(struct ctf_fs_trace *ctf_fs_trace)
 
                g_string_free(name, TRUE);
 
-               if (!ds_file_group) {
+               if (!ds_file_group->stream) {
                        BT_LOGE("Cannot create stream for DS file group: "
                                "addr=%p, stream-name=\"%s\"",
                                ds_file_group, name->str);
@@ -1303,7 +1271,8 @@ struct ctf_fs_component *ctf_fs_create(struct bt_private_component *priv_comp,
        struct ctf_fs_component *ctf_fs;
        struct bt_value *value = NULL;
        const char *path_param;
-       int ret;
+       enum bt_component_status ret;
+       enum bt_value_status value_ret;
 
        ctf_fs = g_new0(struct ctf_fs_component, 1);
        if (!ctf_fs) {
@@ -1311,7 +1280,7 @@ struct ctf_fs_component *ctf_fs_create(struct bt_private_component *priv_comp,
        }
 
        ret = bt_private_component_set_user_data(priv_comp, ctf_fs);
-       assert(ret == 0);
+       assert(ret == BT_COMPONENT_STATUS_OK);
 
        /*
         * We don't need to get a new reference here because as long as
@@ -1324,8 +1293,8 @@ struct ctf_fs_component *ctf_fs_create(struct bt_private_component *priv_comp,
                goto error;
        }
 
-       ret = bt_value_string_get(value, &path_param);
-       assert(ret == 0);
+       value_ret = bt_value_string_get(value, &path_param);
+       assert(value_ret == BT_VALUE_STATUS_OK);
        BT_PUT(value);
        value = bt_value_map_get(params, "clock-class-offset-s");
        if (value) {
@@ -1333,9 +1302,9 @@ struct ctf_fs_component *ctf_fs_create(struct bt_private_component *priv_comp,
                        BT_LOGE("clock-class-offset-s should be an integer");
                        goto error;
                }
-               ret = bt_value_integer_get(value,
+               value_ret = bt_value_integer_get(value,
                        &ctf_fs->metadata_config.clock_class_offset_s);
-               assert(ret == 0);
+               assert(value_ret == BT_VALUE_STATUS_OK);
                BT_PUT(value);
        }
 
@@ -1345,9 +1314,9 @@ struct ctf_fs_component *ctf_fs_create(struct bt_private_component *priv_comp,
                        BT_LOGE("clock-class-offset-ns should be an integer");
                        goto error;
                }
-               ret = bt_value_integer_get(value,
+               value_ret = bt_value_integer_get(value,
                        &ctf_fs->metadata_config.clock_class_offset_ns);
-               assert(ret == 0);
+               assert(value_ret == BT_VALUE_STATUS_OK);
                BT_PUT(value);
        }
 
@@ -1362,8 +1331,7 @@ struct ctf_fs_component *ctf_fs_create(struct bt_private_component *priv_comp,
                goto error;
        }
 
-       ret = create_ctf_fs_traces(ctf_fs, path_param);
-       if (ret) {
+       if (create_ctf_fs_traces(ctf_fs, path_param)) {
                goto error;
        }
 
@@ -1373,7 +1341,7 @@ error:
        ctf_fs_destroy(ctf_fs);
        ctf_fs = NULL;
        ret = bt_private_component_set_user_data(priv_comp, NULL);
-       assert(ret == 0);
+       assert(ret == BT_COMPONENT_STATUS_OK);
 
 end:
        bt_put(value);
This page took 0.025591 seconds and 4 git commands to generate.