X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Ftrace-ir%2Fresolve-field-path.c;h=51719387e97624cc3d0af638254653d87243b5be;hb=867eb7632255f6a84234542198bd7edaac1bce12;hp=4bc0c9c2665fb8e41091a25689be7010e3d2445d;hpb=c4f23e30bf67d2523163614bc9461d84cbe1ae80;p=babeltrace.git diff --git a/src/lib/trace-ir/resolve-field-path.c b/src/lib/trace-ir/resolve-field-path.c index 4bc0c9c2..51719387 100644 --- a/src/lib/trace-ir/resolve-field-path.c +++ b/src/lib/trace-ir/resolve-field-path.c @@ -1,31 +1,15 @@ /* - * Copyright 2018 Philippe Proulx - * - * 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 2018 Philippe Proulx */ #define BT_LOG_TAG "LIB/RESOLVE-FIELD-PATH" #include "lib/logging.h" -#include "lib/assert-pre.h" +#include "lib/assert-cond.h" #include "common/assert.h" -#include +#include #include #include #include @@ -171,7 +155,7 @@ end: return field_path; } -BT_ASSERT_PRE_DEV_FUNC +BT_ASSERT_COND_DEV_FUNC static inline bool target_is_before_source(struct bt_field_path *src_field_path, struct bt_field_path *tgt_field_path) @@ -215,7 +199,7 @@ end: return is_valid; } -BT_ASSERT_PRE_DEV_FUNC +BT_ASSERT_COND_DEV_FUNC static inline struct bt_field_class *borrow_root_field_class( struct bt_resolve_field_path_context *ctx, enum bt_field_path_scope scope) @@ -230,13 +214,13 @@ struct bt_field_class *borrow_root_field_class( case BT_FIELD_PATH_SCOPE_EVENT_PAYLOAD: return ctx->event_payload; default: - abort(); + bt_common_abort(); } return NULL; } -BT_ASSERT_PRE_DEV_FUNC +BT_ASSERT_COND_DEV_FUNC static inline struct bt_field_class *borrow_child_field_class( struct bt_field_class *parent_fc, @@ -273,7 +257,7 @@ struct bt_field_class *borrow_child_field_class( return child_fc; } -BT_ASSERT_PRE_DEV_FUNC +BT_ASSERT_COND_DEV_FUNC static inline bool target_field_path_in_different_scope_has_struct_fc_only( struct bt_field_path *src_field_path, @@ -313,7 +297,7 @@ end: return is_valid; } -BT_ASSERT_PRE_DEV_FUNC +BT_ASSERT_COND_DEV_FUNC static inline bool lca_is_structure_field_class(struct bt_field_path *src_field_path, struct bt_field_path *tgt_field_path, @@ -369,7 +353,7 @@ end: return is_valid; } -BT_ASSERT_PRE_DEV_FUNC +BT_ASSERT_COND_DEV_FUNC static inline bool lca_to_target_has_struct_fc_only(struct bt_field_path *src_field_path, struct bt_field_path *tgt_field_path, @@ -432,7 +416,7 @@ end: return is_valid; } -BT_ASSERT_PRE_DEV_FUNC +BT_ASSERT_COND_DEV_FUNC static inline bool field_path_is_valid(struct bt_field_class *src_fc, struct bt_field_class *tgt_fc, @@ -445,14 +429,14 @@ bool field_path_is_valid(struct bt_field_class *src_fc, tgt_fc, ctx); if (!src_field_path) { - BT_ASSERT_PRE_DEV_MSG("Cannot find requesting field class in " + BT_ASSERT_COND_DEV_MSG("Cannot find requesting field class in " "resolving context: %!+F", src_fc); is_valid = false; goto end; } if (!tgt_field_path) { - BT_ASSERT_PRE_DEV_MSG("Cannot find target field class in " + BT_ASSERT_COND_DEV_MSG("Cannot find target field class in " "resolving context: %!+F", tgt_fc); is_valid = false; goto end; @@ -460,7 +444,7 @@ bool field_path_is_valid(struct bt_field_class *src_fc, /* Target must be before source */ if (!target_is_before_source(src_field_path, tgt_field_path)) { - BT_ASSERT_PRE_DEV_MSG("Target field class is located after " + BT_ASSERT_COND_DEV_MSG("Target field class is located after " "requesting field class: %![req-fc-]+F, %![tgt-fc-]+F", src_fc, tgt_fc); is_valid = false; @@ -473,7 +457,7 @@ bool field_path_is_valid(struct bt_field_class *src_fc, */ if (!target_field_path_in_different_scope_has_struct_fc_only( src_field_path, tgt_field_path, ctx)) { - BT_ASSERT_PRE_DEV_MSG("Target field class is located in a " + BT_ASSERT_COND_DEV_MSG("Target field class is located in a " "different scope than requesting field class, " "but within an array or a variant field class: " "%![req-fc-]+F, %![tgt-fc-]+F", @@ -484,7 +468,7 @@ bool field_path_is_valid(struct bt_field_class *src_fc, /* Same scope: LCA must be a structure field class */ if (!lca_is_structure_field_class(src_field_path, tgt_field_path, ctx)) { - BT_ASSERT_PRE_DEV_MSG("Lowest common ancestor of target and " + BT_ASSERT_COND_DEV_MSG("Lowest common ancestor of target and " "requesting field classes is not a structure field class: " "%![req-fc-]+F, %![tgt-fc-]+F", src_fc, tgt_fc); @@ -495,7 +479,7 @@ bool field_path_is_valid(struct bt_field_class *src_fc, /* Same scope: path from LCA to target has no array/variant FTs */ if (!lca_to_target_has_struct_fc_only(src_field_path, tgt_field_path, ctx)) { - BT_ASSERT_PRE_DEV_MSG("Path from lowest common ancestor of target " + BT_ASSERT_COND_DEV_MSG("Path from lowest common ancestor of target " "and requesting field classes to target field class " "contains an array or a variant field class: " "%![req-fc-]+F, %![tgt-fc-]+F", src_fc, tgt_fc); @@ -512,9 +496,11 @@ end: static struct bt_field_path *resolve_field_path(struct bt_field_class *src_fc, struct bt_field_class *tgt_fc, - struct bt_resolve_field_path_context *ctx) + struct bt_resolve_field_path_context *ctx, + const char *api_func) { - BT_ASSERT_PRE_DEV(field_path_is_valid(src_fc, tgt_fc, ctx), + BT_ASSERT_PRE_DEV_FROM_FUNC(api_func, "valid-field-class", + field_path_is_valid(src_fc, tgt_fc, ctx), "Invalid target field class: %![req-fc-]+F, %![tgt-fc-]+F", src_fc, tgt_fc); return find_field_class_in_ctx(tgt_fc, ctx); @@ -522,7 +508,8 @@ struct bt_field_path *resolve_field_path(struct bt_field_class *src_fc, BT_HIDDEN int bt_resolve_field_paths(struct bt_field_class *fc, - struct bt_resolve_field_path_context *ctx) + struct bt_resolve_field_path_context *ctx, + const char *api_func) { int ret = 0; @@ -536,7 +523,7 @@ int bt_resolve_field_paths(struct bt_field_class *fc, BT_ASSERT(opt_fc->selector_fc); BT_ASSERT(!opt_fc->selector_field_path); opt_fc->selector_field_path = resolve_field_path( - fc, opt_fc->selector_fc, ctx); + fc, opt_fc->selector_fc, ctx, __func__); if (!opt_fc->selector_field_path) { ret = -1; goto end; @@ -547,7 +534,7 @@ int bt_resolve_field_paths(struct bt_field_class *fc, BT_ASSERT(dyn_array_fc->length_fc); BT_ASSERT(!dyn_array_fc->length_field_path); dyn_array_fc->length_field_path = resolve_field_path( - fc, dyn_array_fc->length_fc, ctx); + fc, dyn_array_fc->length_fc, ctx, __func__); if (!dyn_array_fc->length_field_path) { ret = -1; goto end; @@ -561,7 +548,8 @@ int bt_resolve_field_paths(struct bt_field_class *fc, BT_ASSERT(!var_fc->selector_field_path); var_fc->selector_field_path = resolve_field_path(fc, - (void *) var_fc->selector_fc, ctx); + (void *) var_fc->selector_fc, ctx, + __func__); if (!var_fc->selector_field_path) { ret = -1; goto end; @@ -573,7 +561,7 @@ int bt_resolve_field_paths(struct bt_field_class *fc, if (bt_field_class_type_is(fc->type, BT_FIELD_CLASS_TYPE_OPTION)) { struct bt_field_class_option *opt_fc = (void *) fc; - ret = bt_resolve_field_paths(opt_fc->content_fc, ctx); + ret = bt_resolve_field_paths(opt_fc->content_fc, ctx, api_func); } else if (fc->type == BT_FIELD_CLASS_TYPE_STRUCTURE || bt_field_class_type_is(fc->type, BT_FIELD_CLASS_TYPE_VARIANT)) { @@ -585,7 +573,8 @@ int bt_resolve_field_paths(struct bt_field_class *fc, struct bt_named_field_class *named_fc = container_fc->named_fcs->pdata[i]; - ret = bt_resolve_field_paths(named_fc->fc, ctx); + ret = bt_resolve_field_paths(named_fc->fc, ctx, + api_func); if (ret) { goto end; } @@ -594,7 +583,8 @@ int bt_resolve_field_paths(struct bt_field_class *fc, BT_FIELD_CLASS_TYPE_ARRAY)) { struct bt_field_class_array *array_fc = (void *) fc; - ret = bt_resolve_field_paths(array_fc->element_fc, ctx); + ret = bt_resolve_field_paths(array_fc->element_fc, ctx, + api_func); } end: