#include <babeltrace2/babeltrace.h>
#include "common/common.h"
+#include "string-format/format-plugin-comp-cls-name.h"
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
}
}
-static
-const char *component_type_str(bt_component_class_type type)
-{
- switch (type) {
- case BT_COMPONENT_CLASS_TYPE_SOURCE:
- return "source";
- case BT_COMPONENT_CLASS_TYPE_SINK:
- return "sink";
- case BT_COMPONENT_CLASS_TYPE_FILTER:
- return "filter";
- default:
- return "(unknown)";
- }
-}
-
-static
-void print_plugin_comp_cls_opt(FILE *fh, const char *plugin_name,
- const char *comp_cls_name, bt_component_class_type type)
-{
- GString *shell_plugin_name = NULL;
- GString *shell_comp_cls_name = NULL;
-
- if (plugin_name) {
- shell_plugin_name = bt_common_shell_quote(plugin_name, false);
- if (!shell_plugin_name) {
- goto end;
- }
- }
-
- shell_comp_cls_name = bt_common_shell_quote(comp_cls_name, false);
- if (!shell_comp_cls_name) {
- goto end;
- }
-
- fprintf(fh, "'%s%s%s%s",
- bt_common_color_bold(),
- bt_common_color_fg_bright_cyan(),
- component_type_str(type),
- bt_common_color_fg_default());
-
- if (shell_plugin_name) {
- fprintf(fh, ".%s%s%s",
- bt_common_color_fg_blue(),
- shell_plugin_name->str,
- bt_common_color_fg_default());
- }
-
- fprintf(fh, ".%s%s%s'",
- bt_common_color_fg_yellow(),
- shell_comp_cls_name->str,
- bt_common_color_reset());
-
-end:
- if (shell_plugin_name) {
- g_string_free(shell_plugin_name, TRUE);
- }
-
- if (shell_comp_cls_name) {
- g_string_free(shell_comp_cls_name, TRUE);
- }
-}
-
static
void print_value(FILE *, const bt_value *, size_t);
static
void print_bt_config_component(struct bt_config_component *bt_config_component)
{
- fprintf(stderr, " ");
- print_plugin_comp_cls_opt(stderr, bt_config_component->plugin_name->str,
+ gchar *comp_cls_str;
+
+ comp_cls_str = format_plugin_comp_cls_opt(
+ bt_config_component->plugin_name->str,
bt_config_component->comp_cls_name->str,
- bt_config_component->type);
- fprintf(stderr, ":\n");
+ bt_config_component->type,
+ BT_COMMON_COLOR_WHEN_AUTO);
+ BT_ASSERT(comp_cls_str);
+
+ fprintf(stderr, " %s:\n", comp_cls_str);
if (bt_config_component->instance_name->len > 0) {
fprintf(stderr, " Name: %s\n",
fprintf(stderr, " Parameters:\n");
print_value(stderr, bt_config_component->params, 8);
+
+ g_free(comp_cls_str);
}
static
bt_component_class_get_help(comp_cls);
bt_component_class_type type =
bt_component_class_get_type(comp_cls);
+ gchar *comp_cls_str;
- print_plugin_comp_cls_opt(stdout, plugin_name, comp_class_name, type);
- printf("\n");
+ comp_cls_str = format_plugin_comp_cls_opt(plugin_name, comp_class_name,
+ type, BT_COMMON_COLOR_WHEN_AUTO);
+ BT_ASSERT(comp_cls_str);
+
+ printf("%s\n", comp_cls_str);
printf(" %sDescription%s: %s\n", bt_common_color_bold(),
bt_common_color_reset(),
comp_class_description ? comp_class_description : "(None)");
if (comp_class_help) {
printf("\n%s\n", comp_class_help);
}
+
+ g_free(comp_cls_str);
}
static
spec_comp_cls_borrow_comp_cls_func_t spec_comp_cls_borrow_comp_cls_func)
{
uint64_t i;
+ gchar *comp_cls_str = NULL;
if (count == 0) {
printf(" %s%s component classes%s: (none)\n",
bt_component_class_type type =
bt_component_class_get_type(comp_class);
- printf(" ");
- print_plugin_comp_cls_opt(stdout,
- bt_plugin_get_name(plugin), comp_class_name,
- type);
+ g_free(comp_cls_str);
+ comp_cls_str = format_plugin_comp_cls_opt(
+ bt_plugin_get_name(plugin), comp_class_name, type,
+ BT_COMMON_COLOR_WHEN_AUTO);
+ printf(" %s", comp_cls_str);
if (comp_class_description) {
printf(": %s", comp_class_description);
}
end:
- return;
+ g_free(comp_cls_str);
}
static
int64_t i;
GString *folded = NULL;
unsigned int columns;
+ gchar *comp_cls_str = NULL;
if (!error || bt_error_get_cause_count(error) == 0) {
fprintf(stderr, "%s%sUnknown command-line error.%s\n",
bt_common_color_reset());
break;
case BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT:
- fprintf(stderr, "%s%s%s: ",
- bt_common_color_bold(),
- bt_error_cause_component_actor_get_component_name(cause),
- bt_common_color_reset());
- print_plugin_comp_cls_opt(stderr,
+ comp_cls_str = format_plugin_comp_cls_opt(
bt_error_cause_component_actor_get_plugin_name(cause),
bt_error_cause_component_actor_get_component_class_name(cause),
- bt_error_cause_component_actor_get_component_class_type(cause));
+ bt_error_cause_component_actor_get_component_class_type(cause),
+ BT_COMMON_COLOR_WHEN_AUTO);
+ BT_ASSERT(comp_cls_str);
+
+ fprintf(stderr, "%s%s%s: %s",
+ bt_common_color_bold(),
+ bt_error_cause_component_actor_get_component_name(cause),
+ bt_common_color_reset(),
+ comp_cls_str);
break;
case BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT_CLASS:
- print_plugin_comp_cls_opt(stderr,
+ comp_cls_str = format_plugin_comp_cls_opt(
bt_error_cause_component_class_actor_get_plugin_name(cause),
bt_error_cause_component_class_actor_get_component_class_name(cause),
- bt_error_cause_component_class_actor_get_component_class_type(cause));
+ bt_error_cause_component_class_actor_get_component_class_type(cause),
+ BT_COMMON_COLOR_WHEN_AUTO);
+ BT_ASSERT(comp_cls_str);
+
+ fputs(comp_cls_str, stderr);
break;
case BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR:
- fprintf(stderr, "%s%s%s (%s%s%s): ",
+ comp_cls_str = format_plugin_comp_cls_opt(
+ bt_error_cause_message_iterator_actor_get_plugin_name(cause),
+ bt_error_cause_message_iterator_actor_get_component_class_name(cause),
+ bt_error_cause_message_iterator_actor_get_component_class_type(cause)
+ ,BT_COMMON_COLOR_WHEN_AUTO);
+ BT_ASSERT(comp_cls_str);
+
+ fprintf(stderr, "%s%s%s (%s%s%s): %s",
bt_common_color_bold(),
bt_error_cause_message_iterator_actor_get_component_name(cause),
bt_common_color_reset(),
bt_common_color_bold(),
bt_error_cause_message_iterator_actor_get_component_output_port_name(cause),
- bt_common_color_reset());
- print_plugin_comp_cls_opt(stderr,
- bt_error_cause_message_iterator_actor_get_plugin_name(cause),
- bt_error_cause_message_iterator_actor_get_component_class_name(cause),
- bt_error_cause_message_iterator_actor_get_component_class_type(cause));
+ bt_common_color_reset(),
+ comp_cls_str);
break;
default:
bt_common_abort();
if (error) {
bt_error_release(error);
}
+
+ g_free(comp_cls_str);
}
int main(int argc, const char **argv)
--- /dev/null
+/*
+ * Copyright EfficiOS, Inc.
+ *
+ * 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 log_level
+#define BT_LOG_TAG "COMMON/FORMAT-PLUGIN-COMP-CLS-NAME"
+#include <logging/log.h>
+
+#include "format-plugin-comp-cls-name.h"
+
+#include <common/common.h>
+
+
+static
+const char *component_type_str(bt_component_class_type type)
+{
+ switch (type) {
+ case BT_COMPONENT_CLASS_TYPE_SOURCE:
+ return "source";
+ case BT_COMPONENT_CLASS_TYPE_SINK:
+ return "sink";
+ case BT_COMPONENT_CLASS_TYPE_FILTER:
+ return "filter";
+ default:
+ return "(unknown)";
+ }
+}
+
+gchar *format_plugin_comp_cls_opt(const char *plugin_name,
+ const char *comp_cls_name, bt_component_class_type type,
+ enum bt_common_color_when use_colors)
+{
+ GString *str;
+ GString *shell_plugin_name = NULL;
+ GString *shell_comp_cls_name = NULL;
+ gchar *ret;
+ struct bt_common_color_codes codes;
+
+ str = g_string_new(NULL);
+ if (!str) {
+ goto end;
+ }
+
+ if (plugin_name) {
+ shell_plugin_name = bt_common_shell_quote(plugin_name, false);
+ if (!shell_plugin_name) {
+ goto end;
+ }
+ }
+
+ shell_comp_cls_name = bt_common_shell_quote(comp_cls_name, false);
+ if (!shell_comp_cls_name) {
+ goto end;
+ }
+
+ bt_common_color_get_codes(&codes, use_colors);
+
+ g_string_append_printf(str, "'%s%s%s%s",
+ codes.bold,
+ codes.fg_bright_cyan,
+ component_type_str(type),
+ codes.fg_default);
+
+ if (shell_plugin_name) {
+ g_string_append_printf(str, ".%s%s%s",
+ codes.fg_blue,
+ shell_plugin_name->str,
+ codes.fg_default);
+ }
+
+ g_string_append_printf(str, ".%s%s%s'",
+ codes.fg_yellow,
+ shell_comp_cls_name->str,
+ codes.reset);
+
+end:
+ if (shell_plugin_name) {
+ g_string_free(shell_plugin_name, TRUE);
+ }
+
+ if (shell_comp_cls_name) {
+ g_string_free(shell_comp_cls_name, TRUE);
+ }
+
+ if (str) {
+ ret = g_string_free(str, FALSE);
+ } else {
+ ret = NULL;
+ }
+
+ return ret;
+}
--- /dev/null
+#ifndef _BABELTRACE_STRING_FORMAT_FORMAT_PLUGIN_COMP_CLS_NAME_H
+#define _BABELTRACE_STRING_FORMAT_FORMAT_PLUGIN_COMP_CLS_NAME_H
+
+/*
+ * Copyright EfficiOS, Inc.
+ *
+ * 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.
+ */
+
+#include <babeltrace2/babeltrace.h>
+#include <common/common.h>
+#include <common/macros.h>
+#include <glib.h>
+
+BT_HIDDEN
+gchar *format_plugin_comp_cls_opt(const char *plugin_name,
+ const char *comp_cls_name, bt_component_class_type type,
+ enum bt_common_color_when use_colors);
+
+#endif /* _BABELTRACE_STRING_FORMAT_FORMAT_PLUGIN_COMP_CLS_NAME_H */