From b7045dd71bc0524ad6b5db96df365e98e237d395 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 8 Oct 2019 15:27:43 -0400 Subject: [PATCH] sink.utils.dummy: validate parameters using param-validation This patch makes sink.utils.counter validate its parameters using the param-validation utility. The dummy component doesn't accept any parameters, but at least this makes it verify that it doesn't receive any unexpected parameter. Change-Id: I58493af30b04015d53c367487d294ded981539d2 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/2155 Tested-by: jenkins --- src/plugins/utils/dummy/dummy.c | 49 ++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/src/plugins/utils/dummy/dummy.c b/src/plugins/utils/dummy/dummy.c index 2d0c6aa4..703535e7 100644 --- a/src/plugins/utils/dummy/dummy.c +++ b/src/plugins/utils/dummy/dummy.c @@ -20,10 +20,16 @@ * SOFTWARE. */ +#define BT_COMP_LOG_SELF_COMP self_comp +#define BT_LOG_OUTPUT_LEVEL log_level +#define BT_LOG_TAG "PLUGIN/SINK.UTILS.DUMMY" +#include "logging/comp-logging.h" + #include #include "common/macros.h" #include "common/assert.h" #include "dummy.h" +#include "plugins/common/param-validation/param-validation.h" static const char * const in_port_name = "in"; @@ -47,44 +53,61 @@ void dummy_finalize(bt_self_component_sink *comp) destroy_private_dummy_data(dummy); } +struct bt_param_validation_map_value_entry_descr dummy_params[] = { + BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_END +}; + BT_HIDDEN bt_component_class_initialize_method_status dummy_init( - bt_self_component_sink *component, + bt_self_component_sink *self_comp_sink, bt_self_component_sink_configuration *config, const bt_value *params, __attribute__((unused)) void *init_method_data) { - bt_component_class_initialize_method_status status = - BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; + bt_self_component *self_comp = + bt_self_component_sink_as_self_component(self_comp_sink); + const bt_component *comp = bt_self_component_as_component(self_comp); + bt_logging_level log_level = bt_component_get_logging_level(comp); + bt_component_class_initialize_method_status status; bt_self_component_add_port_status add_port_status; struct dummy *dummy = g_new0(struct dummy, 1); + enum bt_param_validation_status validation_status; + gchar *validate_error = NULL; if (!dummy) { status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto end; } - add_port_status = bt_self_component_sink_add_input_port(component, - "in", NULL, NULL); - switch (add_port_status) { - case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR: + validation_status = bt_param_validation_validate(params, + dummy_params, &validate_error); + if (validation_status == BT_PARAM_VALIDATION_STATUS_MEMORY_ERROR) { + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; + goto error; + } else if (validation_status == BT_PARAM_VALIDATION_STATUS_VALIDATION_ERROR) { status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; + BT_COMP_LOGE_APPEND_CAUSE(self_comp, "%s", validate_error); goto error; - case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR: - status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; + } + + add_port_status = bt_self_component_sink_add_input_port(self_comp_sink, + "in", NULL, NULL); + if (add_port_status != BT_SELF_COMPONENT_ADD_PORT_STATUS_OK) { + status = (int) add_port_status; goto error; - default: - break; } - bt_self_component_set_data( - bt_self_component_sink_as_self_component(component), dummy); + bt_self_component_set_data(self_comp, dummy); + + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; goto end; error: destroy_private_dummy_data(dummy); end: + g_free(validate_error); + return status; } -- 2.34.1