string-format: introduce function to format a bt_error_cause
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 26 Nov 2019 17:02:19 +0000 (12:02 -0500)
committerSimon Marchi <simon.marchi@efficios.com>
Thu, 5 Dec 2019 19:29:13 +0000 (19:29 +0000)
In the Python bindings, we'll want to be able to format single error
causes.  Factor out the code to format one bt_error_cause from
format_bt_error.

Change-Id: Ibf5b0363e9a239be6228580246b6613743ace09e
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2434
Tested-by: jenkins <jenkins@lttng.org>
src/string-format/format-error.c
src/string-format/format-error.h

index 4a2f8bf76c3b05f68718607cb2ffbed49800aabb..acf313fb72ffbdd7928ccbd0431a9778340180ed 100644 (file)
 #include <stdint.h>
 #include <string-format/format-plugin-comp-cls-name.h>
 
+gchar *format_bt_error_cause(
+               const bt_error_cause *error_cause,
+               unsigned int columns,
+               bt_logging_level log_level,
+               enum bt_common_color_when use_colors)
+{
+       GString *str;
+       gchar *comp_cls_str = NULL;
+       GString *folded = NULL;
+       struct bt_common_color_codes codes;
+
+       str = g_string_new(NULL);
+       BT_ASSERT(str);
+
+       bt_common_color_get_codes(&codes, use_colors);
+
+       /* Print actor name */
+       g_string_append_c(str, '[');
+       switch (bt_error_cause_get_actor_type(error_cause)) {
+       case BT_ERROR_CAUSE_ACTOR_TYPE_UNKNOWN:
+               g_string_append_printf(str, "%s%s%s",
+                       codes.bold,
+                       bt_error_cause_get_module_name(error_cause),
+                       codes.reset);
+               break;
+       case BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT:
+               comp_cls_str = format_plugin_comp_cls_opt(
+                       bt_error_cause_component_actor_get_plugin_name(error_cause),
+                       bt_error_cause_component_actor_get_component_class_name(error_cause),
+                       bt_error_cause_component_actor_get_component_class_type(error_cause),
+                       use_colors);
+               BT_ASSERT(comp_cls_str);
+
+               g_string_append_printf(str, "%s%s%s: %s",
+                       codes.bold,
+                       bt_error_cause_component_actor_get_component_name(error_cause),
+                       codes.reset,
+                       comp_cls_str);
+
+               break;
+       case BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT_CLASS:
+               comp_cls_str = format_plugin_comp_cls_opt(
+                       bt_error_cause_component_class_actor_get_plugin_name(error_cause),
+                       bt_error_cause_component_class_actor_get_component_class_name(error_cause),
+                       bt_error_cause_component_class_actor_get_component_class_type(error_cause),
+                       use_colors);
+               BT_ASSERT(comp_cls_str);
+
+               g_string_append(str, comp_cls_str);
+               break;
+       case BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR:
+               comp_cls_str = format_plugin_comp_cls_opt(
+                       bt_error_cause_message_iterator_actor_get_plugin_name(error_cause),
+                       bt_error_cause_message_iterator_actor_get_component_class_name(error_cause),
+                       bt_error_cause_message_iterator_actor_get_component_class_type(error_cause),
+                       use_colors);
+               BT_ASSERT(comp_cls_str);
+
+               g_string_append_printf(str, "%s%s%s (%s%s%s): %s",
+                       codes.bold,
+                       bt_error_cause_message_iterator_actor_get_component_name(error_cause),
+                       codes.reset,
+                       codes.bold,
+                       bt_error_cause_message_iterator_actor_get_component_output_port_name(error_cause),
+                       codes.reset,
+                       comp_cls_str);
+
+               break;
+       default:
+               bt_common_abort();
+       }
+
+       /* Print file name and line number */
+       g_string_append_printf(str, "] (%s%s%s%s:%s%" PRIu64 "%s)\n",
+               codes.bold,
+               codes.fg_bright_magenta,
+               bt_error_cause_get_file_name(error_cause),
+               codes.reset,
+               codes.fg_green,
+               bt_error_cause_get_line_number(error_cause),
+               codes.reset);
+
+       /* Print message */
+       folded = bt_common_fold(bt_error_cause_get_message(error_cause),
+               columns, 2);
+       if (folded) {
+               g_string_append(str, folded->str);
+               g_string_free(folded, TRUE);
+               folded = NULL;
+       } else {
+               BT_LOGE_STR("Could not fold string.");
+               g_string_append(str, bt_error_cause_get_message(error_cause));
+       }
+
+       g_free(comp_cls_str);
+
+       return g_string_free(str, FALSE);
+}
+
 gchar *format_bt_error(
                const bt_error *error,
                unsigned int columns,
@@ -37,8 +136,7 @@ gchar *format_bt_error(
 {
        GString *str;
        int64_t i;
-       GString *folded = NULL;
-       gchar *comp_cls_str = NULL;
+       gchar *error_cause_str = NULL;
        struct bt_common_color_codes codes;
 
        BT_ASSERT(error);
@@ -61,83 +159,12 @@ gchar *format_bt_error(
                g_string_append_printf(str, prefix_fmt,
                        codes.bold, codes.fg_bright_red, codes.reset);
 
-               /* Print actor name */
-               g_string_append_c(str, '[');
-               switch (bt_error_cause_get_actor_type(cause)) {
-               case BT_ERROR_CAUSE_ACTOR_TYPE_UNKNOWN:
-                       g_string_append_printf(str, "%s%s%s",
-                               codes.bold,
-                               bt_error_cause_get_module_name(cause),
-                               codes.reset);
-                       break;
-               case BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT:
-                       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),
-                               use_colors);
-                       BT_ASSERT(comp_cls_str);
-
-                       g_string_append_printf(str, "%s%s%s: %s",
-                               codes.bold,
-                               bt_error_cause_component_actor_get_component_name(cause),
-                               codes.reset,
-                               comp_cls_str);
-
-                       break;
-               case BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT_CLASS:
-                       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),
-                               use_colors);
-                       BT_ASSERT(comp_cls_str);
-
-                       g_string_append(str, comp_cls_str);
-                       break;
-               case BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR:
-                       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),
-                               use_colors);
-                       BT_ASSERT(comp_cls_str);
-
-                       g_string_append_printf(str, "%s%s%s (%s%s%s): %s",
-                               codes.bold,
-                               bt_error_cause_message_iterator_actor_get_component_name(cause),
-                               codes.reset,
-                               codes.bold,
-                               bt_error_cause_message_iterator_actor_get_component_output_port_name(cause),
-                               codes.reset,
-                               comp_cls_str);
-
-                       break;
-               default:
-                       bt_common_abort();
-               }
-
-               /* Print file name and line number */
-               g_string_append_printf(str, "] (%s%s%s%s:%s%" PRIu64 "%s)\n",
-                       codes.bold,
-                       codes.fg_bright_magenta,
-                       bt_error_cause_get_file_name(cause),
-                       codes.reset,
-                       codes.fg_green,
-                       bt_error_cause_get_line_number(cause),
-                       codes.reset);
+               g_free(error_cause_str);
+               error_cause_str = format_bt_error_cause(cause, columns,
+                       log_level, use_colors);
+               BT_ASSERT(error_cause_str);
 
-               /* Print message */
-               folded = bt_common_fold(bt_error_cause_get_message(cause),
-                       columns, 2);
-               if (folded) {
-                       g_string_append(str, folded->str);
-                       g_string_free(folded, TRUE);
-                       folded = NULL;
-               } else {
-                       BT_LOGE_STR("Could not fold string.");
-                       g_string_append(str, bt_error_cause_get_message(cause));
-               }
+               g_string_append(str, error_cause_str);
 
                /*
                 * Don't append a newline at the end, since that is used to
@@ -149,7 +176,7 @@ gchar *format_bt_error(
                }
        }
 
-       g_free(comp_cls_str);
+       g_free(error_cause_str);
 
        return g_string_free(str, FALSE);
 }
index 3fbef7aa55a39ff82a48ab11a9487615aadd49e5..4a534ad8a44fc4ad50db219acc2b94f1387ee7e0 100644 (file)
 #include <common/macros.h>
 #include <glib.h>
 
+BT_HIDDEN
+gchar *format_bt_error_cause(
+               const bt_error_cause *error_cause,
+               unsigned int columns,
+               bt_logging_level log_level,
+               enum bt_common_color_when use_colors);
+
 BT_HIDDEN
 gchar *format_bt_error(
                const bt_error *error,
This page took 0.027447 seconds and 4 git commands to generate.