Move to kernel style SPDX license identifiers
[babeltrace.git] / src / plugins / ctf / fs-sink / translate-trace-ir-to-ctf-ir.c
index 5e5a2c5426f5eecf6711c94d105848d6db0c01af..19ca9dcdbbee3d7194ce2095195ea6bf513ea4b4 100644 (file)
@@ -1,23 +1,7 @@
 /*
- * Copyright 2019 Philippe Proulx <pproulx@efficios.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * SPDX-License-Identifier: MIT
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ * Copyright 2019 Philippe Proulx <pproulx@efficios.com>
  */
 
 #define BT_COMP_LOG_SELF_COMP (ctx->self_comp)
@@ -25,6 +9,8 @@
 #define BT_LOG_TAG "PLUGIN/SINK.CTF.FS/TRANSLATE-TRACE-IR-TO-CTF-IR"
 #include "logging/comp-logging.h"
 
+#include "translate-trace-ir-to-ctf-ir.h"
+
 #include <babeltrace2/babeltrace.h>
 #include "common/macros.h"
 #include "common/common.h"
@@ -152,14 +138,14 @@ bool ist_valid_identifier(const char *name)
        }
 
        /* Make sure the name starts with a letter or `_` */
-       if (!isalpha(name[0]) && name[0] != '_') {
+       if (!isalpha((unsigned char) name[0]) && name[0] != '_') {
                ist_valid = false;
                goto end;
        }
 
        /* Make sure the name only contains letters, digits, and `_` */
        for (at = name; *at != '\0'; at++) {
-               if (!isalnum(*at) && *at != '_') {
+               if (!isalnum((unsigned char) *at) && *at != '_') {
                        ist_valid = false;
                        goto end;
                }
@@ -305,7 +291,7 @@ int create_relative_field_ref(struct ctx *ctx,
                tgt_fc = ctx->cur_ec->payload_fc;
                break;
        default:
-               abort();
+               bt_common_abort();
        }
 
        i = 0;
@@ -353,7 +339,7 @@ int create_relative_field_ref(struct ctx *ctx,
                        break;
                }
                default:
-                       abort();
+                       bt_common_abort();
                }
 
                if (named_fc) {
@@ -477,7 +463,7 @@ int create_absolute_field_ref(struct ctx *ctx,
                g_string_assign(tgt_field_ref, "event.fields");
                break;
        default:
-               abort();
+               bt_common_abort();
        }
 
        BT_ASSERT(fc);
@@ -511,7 +497,7 @@ int create_absolute_field_ref(struct ctx *ctx,
                                bt_field_path_item_index_get_index(fp_item));
                        break;
                default:
-                       abort();
+                       bt_common_abort();
                }
 
                BT_ASSERT(named_fc);
@@ -575,7 +561,6 @@ void resolve_field_class(struct ctx *ctx,
                                tgt_field_ref, user_tgt_fc);
                        if (ret) {
                                *create_before = true;
-                               ret = 0;
                                goto end;
                        }
                }
@@ -632,7 +617,7 @@ void append_to_parent_field_class(struct ctx *ctx,
                break;
        }
        default:
-               abort();
+               bt_common_abort();
        }
 }
 
@@ -830,29 +815,29 @@ int maybe_protect_variant_option_name(const bt_field_class *ir_var_fc,
        }
 
        /* Borrow option's ranges */
-       if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR) {
+       if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD) {
                /* No ranges: we're done */
                goto end;
-       } if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR) {
-               const bt_field_class_variant_with_selector_unsigned_option *var_opt =
-                       bt_field_class_variant_with_selector_unsigned_borrow_option_by_index_const(
+       } if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD) {
+               const bt_field_class_variant_with_selector_field_integer_unsigned_option *var_opt =
+                       bt_field_class_variant_with_selector_field_integer_unsigned_borrow_option_by_index_const(
                                ir_var_fc, opt_i);
                opt_ranges =
-                       bt_field_class_variant_with_selector_unsigned_option_borrow_ranges_const(
+                       bt_field_class_variant_with_selector_field_integer_unsigned_option_borrow_ranges_const(
                                var_opt);
        } else {
-               const bt_field_class_variant_with_selector_signed_option *var_opt =
-                       bt_field_class_variant_with_selector_signed_borrow_option_by_index_const(
+               const bt_field_class_variant_with_selector_field_integer_signed_option *var_opt =
+                       bt_field_class_variant_with_selector_field_integer_signed_borrow_option_by_index_const(
                                ir_var_fc, opt_i);
                opt_ranges =
-                       bt_field_class_variant_with_selector_signed_option_borrow_ranges_const(
+                       bt_field_class_variant_with_selector_field_integer_signed_option_borrow_ranges_const(
                                var_opt);
        }
 
        /* Find corresponding mapping by range set in selector FC */
        for (i = 0; i < bt_field_class_enumeration_get_mapping_count(ir_tag_fc);
                        i++) {
-               if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR) {
+               if (ir_var_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD) {
                        const bt_field_class_enumeration_mapping *mapping_base;
                        const bt_field_class_enumeration_unsigned_mapping *mapping;
                        const bt_integer_range_set_unsigned *mapping_ranges;
@@ -862,7 +847,7 @@ int maybe_protect_variant_option_name(const bt_field_class *ir_var_fc,
                        mapping_ranges = bt_field_class_enumeration_unsigned_mapping_borrow_ranges_const(
                                mapping);
 
-                       if (bt_integer_range_set_unsigned_compare(opt_ranges,
+                       if (bt_integer_range_set_unsigned_is_equal(opt_ranges,
                                        mapping_ranges)) {
                                /* We have a winner */
                                mapping_base =
@@ -883,7 +868,7 @@ int maybe_protect_variant_option_name(const bt_field_class *ir_var_fc,
                        mapping_ranges = bt_field_class_enumeration_signed_mapping_borrow_ranges_const(
                                mapping);
 
-                       if (bt_integer_range_set_signed_compare(opt_ranges,
+                       if (bt_integer_range_set_signed_is_equal(opt_ranges,
                                        mapping_ranges)) {
                                /* We have a winner */
                                mapping_base =
@@ -999,9 +984,9 @@ int translate_variant_field_class(struct ctx *ctx)
        ir_fc_type = bt_field_class_get_type(fc->base.ir_fc);
        opt_count = bt_field_class_variant_get_option_count(fc->base.ir_fc);
 
-       if (ir_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR ||
-                       ir_fc_type == BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR) {
-               ir_selector_field_path = bt_field_class_variant_with_selector_borrow_selector_field_path_const(
+       if (bt_field_class_type_is(ir_fc_type,
+                       BT_FIELD_CLASS_TYPE_VARIANT_WITH_SELECTOR_FIELD)) {
+               ir_selector_field_path = bt_field_class_variant_with_selector_field_borrow_selector_field_path_const(
                        fc->base.ir_fc);
                BT_ASSERT(ir_selector_field_path);
        }
@@ -1018,8 +1003,8 @@ int translate_variant_field_class(struct ctx *ctx)
                bt_field_class_type type = bt_field_class_get_type(
                        tgt_fc->ir_fc);
 
-               if (type != BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION &&
-                               type != BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION) {
+               if (!bt_field_class_type_is(type,
+                               BT_FIELD_CLASS_TYPE_ENUMERATION)) {
                        fc->tag_is_before = true;
                        goto validate_opts;
                }
@@ -1092,7 +1077,7 @@ validate_opts:
                        opt_name_b =
                                bt_value_array_borrow_element_by_index_const(
                                        prot_opt_names, j);
-                       if (bt_value_compare(opt_name_a, opt_name_b)) {
+                       if (bt_value_is_equal(opt_name_a, opt_name_b)) {
                                /*
                                 * Variant FC option names are not
                                 * unique when protected.
@@ -1202,10 +1187,13 @@ int translate_dynamic_array_field_class(struct ctx *ctx)
        BT_ASSERT(fc);
 
        /* Resolve length field class before appending to parent */
-       resolve_field_class(ctx,
-               bt_field_class_array_dynamic_borrow_length_field_path_const(
-                       fc->base.base.ir_fc),
-               fc->length_ref, &fc->length_is_before, NULL);
+       if (bt_field_class_get_type(cur_path_stack_top(ctx)->ir_fc) ==
+                       BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD) {
+               resolve_field_class(ctx,
+                       bt_field_class_array_dynamic_with_length_field_borrow_length_field_path_const(
+                               fc->base.base.ir_fc),
+                       fc->length_ref, &fc->length_is_before, NULL);
+       }
 
        append_to_parent_field_class(ctx, (void *) fc);
        ret = cur_path_stack_push(ctx, UINT64_C(-1), NULL, false, elem_ir_fc,
@@ -1304,45 +1292,36 @@ static
 int translate_field_class(struct ctx *ctx)
 {
        int ret;
+       bt_field_class_type ir_fc_type =
+               bt_field_class_get_type(cur_path_stack_top(ctx)->ir_fc);
 
-       switch (bt_field_class_get_type(cur_path_stack_top(ctx)->ir_fc)) {
-       case BT_FIELD_CLASS_TYPE_BOOL:
+       if (ir_fc_type == BT_FIELD_CLASS_TYPE_BOOL) {
                ret = translate_bool_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_BIT_ARRAY:
+       } else if (ir_fc_type == BT_FIELD_CLASS_TYPE_BIT_ARRAY) {
                ret = translate_bit_array_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER:
-       case BT_FIELD_CLASS_TYPE_SIGNED_INTEGER:
-       case BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION:
-       case BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION:
+       } else if (bt_field_class_type_is(ir_fc_type,
+                       BT_FIELD_CLASS_TYPE_INTEGER)) {
                ret = translate_integer_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_REAL:
+       } else if (bt_field_class_type_is(ir_fc_type,
+                       BT_FIELD_CLASS_TYPE_REAL)) {
                ret = translate_real_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_STRING:
+       } else if (ir_fc_type == BT_FIELD_CLASS_TYPE_STRING) {
                ret = translate_string_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_STRUCTURE:
+       } else if (ir_fc_type == BT_FIELD_CLASS_TYPE_STRUCTURE) {
                ret = translate_structure_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
+       } else if (ir_fc_type == BT_FIELD_CLASS_TYPE_STATIC_ARRAY) {
                ret = translate_static_array_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY:
+       } else if (bt_field_class_type_is(ir_fc_type,
+                       BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY)) {
                ret = translate_dynamic_array_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_OPTION:
+       } else if (bt_field_class_type_is(ir_fc_type,
+                       BT_FIELD_CLASS_TYPE_OPTION)) {
                ret = translate_option_field_class(ctx);
-               break;
-       case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR:
-       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR:
-       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR:
+       } else if (bt_field_class_type_is(ir_fc_type,
+                       BT_FIELD_CLASS_TYPE_VARIANT)) {
                ret = translate_variant_field_class(ctx);
-               break;
-       default:
-               abort();
+       } else {
+               bt_common_abort();
        }
 
        return ret;
@@ -1412,7 +1391,7 @@ int set_field_ref(struct fs_sink_ctf_field_class *fc, const char *fc_name,
                break;
        }
        default:
-               abort();
+               bt_common_abort();
        }
 
        BT_ASSERT(field_ref);
@@ -1501,7 +1480,7 @@ int set_field_refs(struct fs_sink_ctf_field_class * const fc,
        {
                uint64_t i;
                uint64_t len;
-               struct fs_sink_ctf_field_class_struct *struct_fc;
+               struct fs_sink_ctf_field_class_struct *struct_fc = NULL;
                struct fs_sink_ctf_field_class_variant *var_fc = NULL;
                struct fs_sink_ctf_named_field_class *named_fc;
 
@@ -1699,6 +1678,7 @@ end:
        return ret;
 }
 
+static
 bool default_clock_class_name_exists(struct fs_sink_ctf_trace *trace,
                const char *name)
 {
@@ -1778,7 +1758,6 @@ int translate_stream_class(struct fs_sink_comp *fs_sink,
                                        (*out_sc)->default_clock_class_name->str)) {
                                /* Invalid: create a new name */
                                make_unique_default_clock_class_name(*out_sc);
-                               ret = 0;
                        }
                } else {
                        /* No name: create a name */
This page took 0.027666 seconds and 4 git commands to generate.