#include <babeltrace/graph/notification-iterator.h>
#include <babeltrace/ref.h>
#include <babeltrace/values.h>
+#include <babeltrace/values-internal.h>
#include <babeltrace/logging.h>
#include <unistd.h>
#include <stdlib.h>
"BABELTRACE_PLUGIN_CTF_METADATA_LOG_LEVEL",
"BABELTRACE_PLUGIN_CTF_NOTIF_ITER_LOG_LEVEL",
"BABELTRACE_PLUGIN_LTTNG_UTILS_DEBUG_INFO_FLT_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_TEXT_DMESG_SRC_LOG_LEVEL",
"BABELTRACE_PLUGIN_UTILS_MUXER_FLT_LOG_LEVEL",
"BABELTRACE_PLUGIN_UTILS_TRIMMER_FLT_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_CTFCOPYTRACE_LIB_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_CTF_FS_SINK_LOG_LEVEL",
"BABELTRACE_PYTHON_PLUGIN_PROVIDER_LOG_LEVEL",
NULL,
};
GPtrArray *loaded_plugins;
+#ifdef __MINGW32__
+#include <windows.h>
+
+static
+BOOL WINAPI signal_handler(DWORD signal) {
+ if (the_graph) {
+ bt_graph_cancel(the_graph);
+ }
+
+ canceled = true;
+
+ return TRUE;
+}
+
static
-void sigint_handler(int signum)
+void set_signal_handler(void)
+{
+ if (!SetConsoleCtrlHandler(signal_handler, TRUE)) {
+ BT_LOGE("Failed to set the ctrl+c handler.");
+ }
+}
+#else /* __MINGW32__ */
+static
+void signal_handler(int signum)
{
if (signum != SIGINT) {
return;
canceled = true;
}
+static
+void set_signal_handler(void)
+{
+ struct sigaction new_action, old_action;
+
+ new_action.sa_handler = signal_handler;
+ sigemptyset(&new_action.sa_mask);
+ new_action.sa_flags = 0;
+ sigaction(SIGINT, NULL, &old_action);
+
+ if (old_action.sa_handler != SIG_IGN) {
+ sigaction(SIGINT, &new_action, NULL);
+ }
+}
+#endif /* __MINGW32__ */
+
static
void init_static_data(void)
{
const char *str_val;
int size;
int i;
+ enum bt_value_status status;
if (!value) {
return;
bt_common_color_reset());
break;
case BT_VALUE_TYPE_BOOL:
- bt_value_bool_get(value, &bool_val);
+ status = bt_value_bool_get(value, &bool_val);
+ if (status != BT_VALUE_STATUS_OK) {
+ goto error;
+ }
fprintf(fp, "%s%s%s%s\n", bt_common_color_bold(),
bt_common_color_fg_cyan(), bool_val ? "yes" : "no",
bt_common_color_reset());
break;
case BT_VALUE_TYPE_INTEGER:
- bt_value_integer_get(value, &int_val);
+ status = bt_value_integer_get(value, &int_val);
+ if (status != BT_VALUE_STATUS_OK) {
+ goto error;
+ }
fprintf(fp, "%s%s%" PRId64 "%s\n", bt_common_color_bold(),
bt_common_color_fg_red(), int_val,
bt_common_color_reset());
break;
case BT_VALUE_TYPE_FLOAT:
- bt_value_float_get(value, &dbl_val);
+ status = bt_value_float_get(value, &dbl_val);
+ if (status != BT_VALUE_STATUS_OK) {
+ goto error;
+ }
fprintf(fp, "%s%s%lf%s\n", bt_common_color_bold(),
bt_common_color_fg_red(), dbl_val,
bt_common_color_reset());
break;
case BT_VALUE_TYPE_STRING:
- bt_value_string_get(value, &str_val);
+ status = bt_value_string_get(value, &str_val);
+ if (status != BT_VALUE_STATUS_OK) {
+ goto error;
+ }
fprintf(fp, "%s%s%s%s\n", bt_common_color_bold(),
bt_common_color_fg_green(), str_val,
bt_common_color_reset());
break;
case BT_VALUE_TYPE_ARRAY:
size = bt_value_array_size(value);
- assert(size >= 0);
+ if (size < 0) {
+ goto error;
+ }
if (size == 0) {
print_indent(fp, indent);
struct bt_value *element =
bt_value_array_get(value, i);
- assert(element);
+ if (!element) {
+ goto error;
+ }
print_indent(fp, indent);
fprintf(fp, "- ");
default:
abort();
}
+ return;
+
+error:
+ BT_LOGE("Error printing value of type %s.",
+ bt_value_type_string(bt_value_get_type(value)));
}
static
struct bt_value *plugin_path_value = NULL;
const char *plugin_path;
struct bt_plugin_set *plugin_set;
+ enum bt_value_status status;
plugin_path_value = bt_value_array_get(plugin_paths, i);
- bt_value_string_get(plugin_path_value, &plugin_path);
- assert(plugin_path);
+ status = bt_value_string_get(plugin_path_value, &plugin_path);
+ if (status != BT_VALUE_STATUS_OK) {
+ BT_LOGD_STR("Cannot get plugin path string.");
+ BT_PUT(plugin_path_value);
+ continue;
+ }
/*
* Skip this if the directory does not exist because
printf("%s%s%s%s:\n", bt_common_color_bold(),
bt_common_color_fg_blue(), plugin_name,
bt_common_color_reset());
- printf(" %sPath%s: %s\n", bt_common_color_bold(),
- bt_common_color_reset(), path ? path : "(None)");
+ if (path) {
+ printf(" %sPath%s: %s\n", bt_common_color_bold(),
+ bt_common_color_reset(), path);
+ } else {
+ puts(" Built-in");
+ }
if (version_status == BT_PLUGIN_STATUS_OK) {
printf(" %sVersion%s: %u.%u.%u",
assert(upstream_port_name);
if (!bt_common_star_glob_match(
- cfg_conn->downstream_port_glob->str, -1ULL,
- downstream_port_name, -1ULL)) {
+ cfg_conn->downstream_port_glob->str, SIZE_MAX,
+ downstream_port_name, SIZE_MAX)) {
bt_put(downstream_port);
continue;
}
}
ctx->connect_ports = true;
}
- goto end;
- }
- if (status != BT_GRAPH_STATUS_OK) {
- BT_LOGE("Cannot create connection: cannot find a matching downstream port for upstream port: "
- "upstream-port-addr=%p, upstream-port-name=\"%s\", "
- "downstream-comp-name=\"%s\", conn-arg=\"%s\"",
- upstream_port, bt_port_get_name(upstream_port),
- cfg_conn->downstream_comp_name->str,
- cfg_conn->arg->str);
- fprintf(stderr,
- "Cannot create connection: cannot find a matching downstream port for upstream port `%s`: %s\n",
- bt_port_get_name(upstream_port), cfg_conn->arg->str);
- goto error;
+ /*
+ * We found a matching downstream port: the search is
+ * over.
+ */
+ goto end;
}
- goto end;
+ /* No downstream port found */
+ BT_LOGE("Cannot create connection: cannot find a matching downstream port for upstream port: "
+ "upstream-port-addr=%p, upstream-port-name=\"%s\", "
+ "downstream-comp-name=\"%s\", conn-arg=\"%s\"",
+ upstream_port, bt_port_get_name(upstream_port),
+ cfg_conn->downstream_comp_name->str,
+ cfg_conn->arg->str);
+ fprintf(stderr,
+ "Cannot create connection: cannot find a matching downstream port for upstream port `%s`: %s\n",
+ bt_port_get_name(upstream_port), cfg_conn->arg->str);
error:
ret = -1;
if (!bt_common_star_glob_match(
cfg_conn->upstream_port_glob->str,
- -1ULL, upstream_port_name, -1ULL)) {
+ SIZE_MAX, upstream_port_name, SIZE_MAX)) {
continue;
}
the_graph = ctx->graph;
ret = bt_graph_add_port_added_listener(ctx->graph,
- graph_port_added_listener, ctx);
+ graph_port_added_listener, NULL, ctx);
if (ret < 0) {
BT_LOGE_STR("Cannot add \"port added\" listener to graph.");
goto error;
}
ret = bt_graph_add_port_removed_listener(ctx->graph,
- graph_port_removed_listener, ctx);
+ graph_port_removed_listener, NULL, ctx);
if (ret < 0) {
BT_LOGE_STR("Cannot add \"port removed\" listener to graph.");
goto error;
}
ret = bt_graph_add_ports_connected_listener(ctx->graph,
- graph_ports_connected_listener, ctx);
+ graph_ports_connected_listener, NULL, ctx);
if (ret < 0) {
BT_LOGE_STR("Cannot add \"ports connected\" listener to graph.");
goto error;
}
ret = bt_graph_add_ports_disconnected_listener(ctx->graph,
- graph_ports_disconnected_listener, ctx);
+ graph_ports_disconnected_listener, NULL, ctx);
if (ret < 0) {
BT_LOGE_STR("Cannot add \"ports disconnected\" listener to graph.");
goto error;
*/
for (stream_idx = 0; stream_idx < stream_count; stream_idx++) {
const char *stream_path;
- gboolean hash_ret;
port_id = g_new0(struct port_id, 1);
if (!port_id) {
BT_LOGD("Inserting stream intersection ");
- hash_ret = g_hash_table_insert(ctx->intersections,
- port_id, trace_range);
- assert(hash_ret);
+ g_hash_table_insert(ctx->intersections, port_id, trace_range);
port_id = NULL;
trace_range = NULL;
while (*env_var_name) {
if (!getenv(*env_var_name)) {
if (cfg->verbose) {
- setenv(*env_var_name, "I", 1);
+ g_setenv(*env_var_name, "I", 1);
} else if (cfg->debug) {
- setenv(*env_var_name, "V", 1);
+ g_setenv(*env_var_name, "V", 1);
} else {
char val[2] = { 0 };
* explicitly specified.
*/
val[0] = cfg->log_level;
- setenv(*env_var_name, val, 1);
+ g_setenv(*env_var_name, val, 1);
}
}
}
}
-static
-void set_sigint_handler(void)
-{
- struct sigaction new_action, old_action;
-
- new_action.sa_handler = sigint_handler;
- sigemptyset(&new_action.sa_mask);
- new_action.sa_flags = 0;
- sigaction(SIGINT, NULL, &old_action);
-
- if (old_action.sa_handler != SIG_IGN) {
- sigaction(SIGINT, &new_action, NULL);
- }
-}
-
int main(int argc, const char **argv)
{
int ret;
struct bt_config *cfg;
init_log_level();
- set_sigint_handler();
+ set_signal_handler();
init_static_data();
cfg = bt_config_cli_args_create_with_default(argc, argv, &retcode);