X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Futils%2Ftrimmer%2Ftrimmer.c;h=d13a9fef3d4227f3abc7b741c2f2796e7c096501;hb=4e24e7b301c53b3fb75ee63dcb2a464c307b8890;hp=2fc365c9650d82ca320acfb6a342fd2ee59de236;hpb=9a2c8b8e0cb6579066b4b8ceb8255cdd5175bb2d;p=babeltrace.git diff --git a/src/plugins/utils/trimmer/trimmer.c b/src/plugins/utils/trimmer/trimmer.c index 2fc365c9..d13a9fef 100644 --- a/src/plugins/utils/trimmer/trimmer.c +++ b/src/plugins/utils/trimmer/trimmer.c @@ -1,24 +1,8 @@ /* + * SPDX-License-Identifier: MIT + * * Copyright 2016 Jérémie Galarneau * Copyright 2019 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. - * - * 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. */ #define BT_LOG_OUTPUT_LEVEL (trimmer_comp->log_level) @@ -156,7 +140,6 @@ struct trimmer_comp *create_trimmer_comp(void) return g_new0(struct trimmer_comp, 1); } -BT_HIDDEN void trimmer_finalize(bt_self_component_filter *self_comp) { struct trimmer_comp *trimmer_comp = @@ -190,7 +173,7 @@ bool compile_and_match(const char *pattern, const char *string, GMatchInfo **mat /* * g_regex_match allocates `*match_info` even if it returns * FALSE. If there's no match, we have no use for it, so free - * it immediatly and don't return it to the caller. + * it immediately and don't return it to the caller. */ g_match_info_free(*match_info); *match_info = NULL; @@ -442,7 +425,7 @@ end: */ static int set_bound_from_param(struct trimmer_comp *trimmer_comp, - const char *param_name, const bt_value *param, + const bt_value *param, struct trimmer_bound *bound, bool is_gmt) { int ret; @@ -456,7 +439,7 @@ int set_bound_from_param(struct trimmer_comp *trimmer_comp, * Just convert it to a temporary string to handle * everything the same way. */ - sprintf(tmp_arg, "%" PRId64, value); + snprintf(tmp_arg, sizeof(tmp_arg), "%" PRId64, value); arg = tmp_arg; } else { BT_ASSERT(bt_value_is_string(param)); @@ -568,7 +551,7 @@ bt_component_class_initialize_method_status init_trimmer_comp_from_params( value = bt_value_map_borrow_entry_value_const(params, "begin"); if (value) { - if (set_bound_from_param(trimmer_comp, "begin", value, + if (set_bound_from_param(trimmer_comp, value, &trimmer_comp->begin, trimmer_comp->is_gmt)) { /* set_bound_from_param() logs errors */ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; @@ -581,7 +564,7 @@ bt_component_class_initialize_method_status init_trimmer_comp_from_params( value = bt_value_map_borrow_entry_value_const(params, "end"); if (value) { - if (set_bound_from_param(trimmer_comp, "end", value, + if (set_bound_from_param(trimmer_comp, value, &trimmer_comp->end, trimmer_comp->is_gmt)) { /* set_bound_from_param() logs errors */ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; @@ -611,8 +594,9 @@ end: bt_component_class_initialize_method_status trimmer_init( bt_self_component_filter *self_comp_flt, - bt_self_component_filter_configuration *config, - const bt_value *params, void *init_data) + bt_self_component_filter_configuration *config __attribute__((unused)), + const bt_value *params, + void *init_data __attribute__((unused))) { bt_component_class_initialize_method_status status; bt_self_component_add_port_status add_port_status; @@ -695,17 +679,17 @@ void destroy_trimmer_iterator_stream_state( g_free(sstate); } -BT_HIDDEN bt_message_iterator_class_initialize_method_status trimmer_msg_iter_init( bt_self_message_iterator *self_msg_iter, bt_self_message_iterator_configuration *config, - bt_self_component *self_comp, - bt_self_component_port_output *port) + bt_self_component_port_output *port __attribute__((unused))) { bt_message_iterator_class_initialize_method_status status; bt_message_iterator_create_from_message_iterator_status msg_iter_status; struct trimmer_iterator *trimmer_it; + bt_self_component *self_comp = + bt_self_message_iterator_borrow_component(self_msg_iter); trimmer_it = g_new0(struct trimmer_iterator, 1); if (!trimmer_it) { @@ -799,27 +783,33 @@ int get_msg_ns_from_origin(const bt_message *msg, int64_t *ns_from_origin, msg); break; case BT_MESSAGE_TYPE_PACKET_BEGINNING: - clock_class = - bt_message_packet_beginning_borrow_stream_class_default_clock_class_const( - msg); - if (G_UNLIKELY(!clock_class)) { - goto error; + { + const bt_packet *packet = bt_message_packet_beginning_borrow_packet_const(msg); + const bt_stream *stream = bt_packet_borrow_stream_const(packet); + const bt_stream_class *stream_class = bt_stream_borrow_class_const(stream); + + if (!bt_stream_class_packets_have_beginning_default_clock_snapshot(stream_class)) { + goto no_clock_snapshot; } clock_snapshot = bt_message_packet_beginning_borrow_default_clock_snapshot_const( msg); break; + } case BT_MESSAGE_TYPE_PACKET_END: - clock_class = - bt_message_packet_end_borrow_stream_class_default_clock_class_const( - msg); - if (G_UNLIKELY(!clock_class)) { - goto error; + { + const bt_packet *packet = bt_message_packet_end_borrow_packet_const(msg); + const bt_stream *stream = bt_packet_borrow_stream_const(packet); + const bt_stream_class *stream_class = bt_stream_borrow_class_const(stream); + + if (!bt_stream_class_packets_have_end_default_clock_snapshot(stream_class)) { + goto no_clock_snapshot; } clock_snapshot = bt_message_packet_end_borrow_default_clock_snapshot_const( msg); break; + } case BT_MESSAGE_TYPE_STREAM_BEGINNING: { enum bt_message_stream_clock_snapshot_state cs_state; @@ -855,30 +845,34 @@ int get_msg_ns_from_origin(const bt_message *msg, int64_t *ns_from_origin, break; } case BT_MESSAGE_TYPE_DISCARDED_EVENTS: - clock_class = - bt_message_discarded_events_borrow_stream_class_default_clock_class_const( - msg); - if (G_UNLIKELY(!clock_class)) { - goto error; + { + const bt_stream *stream = bt_message_discarded_events_borrow_stream_const(msg); + const bt_stream_class *stream_class = bt_stream_borrow_class_const(stream); + + if (!bt_stream_class_discarded_events_have_default_clock_snapshots(stream_class)) { + goto no_clock_snapshot; } clock_snapshot = bt_message_discarded_events_borrow_beginning_default_clock_snapshot_const( msg); break; + } case BT_MESSAGE_TYPE_DISCARDED_PACKETS: - clock_class = - bt_message_discarded_packets_borrow_stream_class_default_clock_class_const( - msg); - if (G_UNLIKELY(!clock_class)) { - goto error; + { + const bt_stream *stream = bt_message_discarded_packets_borrow_stream_const(msg); + const bt_stream_class *stream_class = bt_stream_borrow_class_const(stream); + + if (!bt_stream_class_discarded_packets_have_default_clock_snapshots(stream_class)) { + goto no_clock_snapshot; } clock_snapshot = bt_message_discarded_packets_borrow_beginning_default_clock_snapshot_const( msg); break; + } case BT_MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY: clock_snapshot = - bt_message_message_iterator_inactivity_borrow_default_clock_snapshot_const( + bt_message_message_iterator_inactivity_borrow_clock_snapshot_const( msg); break; default: @@ -1303,30 +1297,46 @@ create_stream_state_entry( * the support for not having them is * implemented. */ - if (!bt_stream_class_packets_have_beginning_default_clock_snapshot( - sc)) { - BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, - "Unsupported stream: packets have no beginning clock snapshot: " - "stream-addr=%p, " - "stream-id=%" PRIu64 ", " - "stream-name=\"%s\"", - stream, bt_stream_get_id(stream), - bt_stream_get_name(stream)); - status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; - goto end; - } + if (bt_stream_class_supports_packets(sc)) { + if (!bt_stream_class_packets_have_beginning_default_clock_snapshot( + sc)) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Unsupported stream: packets have no beginning clock snapshot: " + "stream-addr=%p, " + "stream-id=%" PRIu64 ", " + "stream-name=\"%s\"", + stream, bt_stream_get_id(stream), + bt_stream_get_name(stream)); + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; + goto end; + } - if (!bt_stream_class_packets_have_end_default_clock_snapshot( - sc)) { - BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, - "Unsupported stream: packets have no end clock snapshot: " - "stream-addr=%p, " - "stream-id=%" PRIu64 ", " - "stream-name=\"%s\"", - stream, bt_stream_get_id(stream), - bt_stream_get_name(stream)); - status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; - goto end; + if (!bt_stream_class_packets_have_end_default_clock_snapshot( + sc)) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Unsupported stream: packets have no end clock snapshot: " + "stream-addr=%p, " + "stream-id=%" PRIu64 ", " + "stream-name=\"%s\"", + stream, bt_stream_get_id(stream), + bt_stream_get_name(stream)); + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; + goto end; + } + + if (bt_stream_class_supports_discarded_packets(sc) && + !bt_stream_class_discarded_packets_have_default_clock_snapshots(sc)) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Unsupported stream: discarded packets " + "have no clock snapshots: " + "stream-addr=%p, " + "stream-id=%" PRIu64 ", " + "stream-name=\"%s\"", + stream, bt_stream_get_id(stream), + bt_stream_get_name(stream)); + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; + goto end; + } } if (bt_stream_class_supports_discarded_events(sc) && @@ -1342,20 +1352,6 @@ create_stream_state_entry( goto end; } - if (bt_stream_class_supports_discarded_packets(sc) && - !bt_stream_class_discarded_packets_have_default_clock_snapshots(sc)) { - BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, - "Unsupported stream: discarded packets " - "have no clock snapshots: " - "stream-addr=%p, " - "stream-id=%" PRIu64 ", " - "stream-name=\"%s\"", - stream, bt_stream_get_id(stream), - bt_stream_get_name(stream)); - status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; - goto end; - } - sstate = g_new0(struct trimmer_iterator_stream_state, 1); if (!sstate) { status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR; @@ -1878,7 +1874,6 @@ end: return status; } -BT_HIDDEN bt_message_iterator_class_next_method_status trimmer_msg_iter_next( bt_self_message_iterator *self_msg_iter, bt_message_array_const msgs, uint64_t capacity, @@ -1947,7 +1942,6 @@ end: return status; } -BT_HIDDEN void trimmer_msg_iter_finalize(bt_self_message_iterator *self_msg_iter) { struct trimmer_iterator *trimmer_it =