X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=plugins%2Futils%2Ftrimmer%2Ftrimmer.c;h=a7bc66d572a2ede20fa4c81bfffe2d8cbe4d2c3b;hb=c5b9b4417bedfbec9b5dd23b8395ccdd4eeffc44;hp=54a1667070dc0937d7dcb59ebdc71437f537a0f5;hpb=90157d89276ed1a569a2d4ffcfeed0b415817c12;p=babeltrace.git diff --git a/plugins/utils/trimmer/trimmer.c b/plugins/utils/trimmer/trimmer.c index 54a16670..a7bc66d5 100644 --- a/plugins/utils/trimmer/trimmer.c +++ b/plugins/utils/trimmer/trimmer.c @@ -30,19 +30,11 @@ #include "logging.h" #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include #include "trimmer.h" #include "iterator.h" -#include +#include static void destroy_trimmer_data(struct trimmer *trimmer) @@ -56,9 +48,9 @@ struct trimmer *create_trimmer_data(void) return g_new0(struct trimmer, 1); } -void finalize_trimmer(struct bt_private_component *component) +void finalize_trimmer(struct bt_self_component *component) { - void *data = bt_private_component_get_user_data(component); + void *data = bt_self_component_get_user_data(component); destroy_trimmer_data(data); } @@ -80,12 +72,25 @@ void finalize_trimmer(struct bt_private_component *component) * ss */ static -int timestamp_from_arg(const char *arg, struct trimmer *trimmer, - struct trimmer_bound *result_bound, bt_bool gmt) +int timestamp_from_param(const char *param_name, struct bt_value *param, + struct trimmer *trimmer, struct trimmer_bound *result_bound, + bt_bool gmt) { int ret; int64_t value; unsigned int year, month, day, hh, mm, ss, ns; + const char *arg; + + if (bt_value_is_integer(param)) { + (void) bt_value_integer_get(param, &value); + goto set; + } else if (!bt_value_is_string(param)) { + BT_LOGE("`%s` parameter must be an integer or a string value.", + param_name); + goto error; + } + + (void) bt_value_string_get(param, &arg); /* YYYY-MM-DD hh:mm:ss.ns */ ret = sscanf(arg, "%u-%u-%u %u:%u:%u.%u", @@ -130,7 +135,7 @@ int timestamp_from_arg(const char *arg, struct trimmer *trimmer, if (ret == 4) { if (!trimmer->date) { /* We don't know which day until we get an event. */ - result_bound->lazy_values.hh = hh; + result_bound->lazy_value.hh = hh; result_bound->lazy_values.mm = mm; result_bound->lazy_values.ss = ss; result_bound->lazy_values.ns = ns; @@ -222,7 +227,7 @@ int timestamp_from_arg(const char *arg, struct trimmer *trimmer, if (ret == 3) { if (!trimmer->date) { /* We don't know which day until we get an event. */ - result_bound->lazy_values.hh = hh; + result_bound->lazy_value.hh = hh; result_bound->lazy_values.mm = mm; result_bound->lazy_values.ss = ss; result_bound->lazy_values.ns = 0; @@ -271,6 +276,7 @@ int timestamp_from_arg(const char *arg, struct trimmer *trimmer, goto set; } +error: /* Not found. */ return -1; @@ -292,54 +298,43 @@ enum bt_component_status init_from_params(struct trimmer *trimmer, bt_bool gmt = BT_FALSE; enum bt_component_status ret = BT_COMPONENT_STATUS_OK; - assert(params); + BT_ASSERT(params); value = bt_value_map_get(params, "clock-gmt"); if (value) { enum bt_value_status value_ret; - value_ret = bt_value_bool_get(value, &gmt); - if (value_ret) { - ret = BT_COMPONENT_STATUS_INVALID; - BT_LOGE_STR("Failed to retrieve clock-gmt value. Expecting a boolean"); - } + gmt = bt_value_bool_get(value); } - bt_put(value); if (ret != BT_COMPONENT_STATUS_OK) { goto end; } + BT_VALUE_PUT_REF_AND_RESET(value); value = bt_value_map_get(params, "begin"); if (value) { - enum bt_value_status value_ret; - const char *str; - - value_ret = bt_value_string_get(value, &str); - if (value_ret || timestamp_from_arg(str, + if (timestamp_from_param("begin", value, trimmer, &trimmer->begin, gmt)) { + BT_LOGE_STR("Failed to convert `begin` parameter to a timestamp."); ret = BT_COMPONENT_STATUS_INVALID; - BT_LOGE_STR("Failed to retrieve begin value. Expecting a timestamp string"); + goto end; } } - bt_put(value); - if (ret != BT_COMPONENT_STATUS_OK) { - goto end; - } + BT_VALUE_PUT_REF_AND_RESET(value); value = bt_value_map_get(params, "end"); if (value) { - enum bt_value_status value_ret; - const char *str; - - value_ret = bt_value_string_get(value, &str); - if (value_ret || timestamp_from_arg(str, + if (timestamp_from_param("end", value, trimmer, &trimmer->end, gmt)) { + BT_LOGE_STR("Failed to convert `end` parameter to a timestamp."); ret = BT_COMPONENT_STATUS_INVALID; - BT_LOGE_STR("Failed to retrieve end value. Expecting a timestamp string"); + goto end; } } - bt_put(value); + end: + bt_value_put_ref(value); + if (trimmer->begin.set && trimmer->end.set) { if (trimmer->begin.value > trimmer->end.value) { BT_LOGE_STR("Unexpected: time range begin value is above end value"); @@ -350,7 +345,7 @@ end: } enum bt_component_status trimmer_component_init( - struct bt_private_component *component, struct bt_value *params, + struct bt_self_component *component, struct bt_value *params, UNUSED_VAR void *init_method_data) { enum bt_component_status ret; @@ -362,19 +357,19 @@ enum bt_component_status trimmer_component_init( } /* Create input and output ports */ - ret = bt_private_component_filter_add_input_private_port( + ret = bt_self_component_filter_add_input_port( component, "in", NULL, NULL); if (ret != BT_COMPONENT_STATUS_OK) { goto error; } - ret = bt_private_component_filter_add_output_private_port( + ret = bt_self_component_filter_add_output_port( component, "out", NULL, NULL); if (ret != BT_COMPONENT_STATUS_OK) { goto error; } - ret = bt_private_component_set_user_data(component, trimmer); + ret = bt_self_component_set_user_data(component, trimmer); if (ret != BT_COMPONENT_STATUS_OK) { goto error; }