common: cast arguments to character classification functions to unsigned char
[babeltrace.git] / src / plugins / text / pretty / print.c
index b3aaeb44d030785c7064daf1114b4b1d686b8f05..f81b892b1d19c0ffd4e79f0f5e091fc78d61bb93 100644 (file)
 #include "common/assert.h"
 #include <inttypes.h>
 #include <ctype.h>
+#include <stdbool.h>
 #include <string.h>
 #include "pretty.h"
 
 #define NSEC_PER_SEC 1000000000LL
 
-#define COLOR_NAME             BT_COMMON_COLOR_BOLD
-#define COLOR_FIELD_NAME       BT_COMMON_COLOR_FG_CYAN
-#define COLOR_RST              BT_COMMON_COLOR_RESET
-#define COLOR_STRING_VALUE     BT_COMMON_COLOR_BOLD
-#define COLOR_NUMBER_VALUE     BT_COMMON_COLOR_BOLD
-#define COLOR_ENUM_MAPPING_NAME        BT_COMMON_COLOR_BOLD
-#define COLOR_UNKNOWN          BT_COMMON_COLOR_BOLD BT_COMMON_COLOR_FG_RED
-#define COLOR_EVENT_NAME       BT_COMMON_COLOR_BOLD BT_COMMON_COLOR_FG_MAGENTA
-#define COLOR_TIMESTAMP                BT_COMMON_COLOR_BOLD BT_COMMON_COLOR_FG_YELLOW
+static char color_name[32];
+static char color_field_name[32];
+static char color_rst[32];
+static char color_string_value[32];
+static char color_number_value[32];
+static char color_enum_mapping_name[32];
+static char color_unknown[32];
+static char color_event_name[32];
+static char color_timestamp[32];
 
 struct timestamp {
        int64_t real_timestamp; /* Relative to UNIX epoch. */
@@ -59,26 +60,26 @@ static
 void print_name_equal(struct pretty_component *pretty, const char *name)
 {
        if (pretty->use_colors) {
-               g_string_append(pretty->string, COLOR_NAME);
-               g_string_append(pretty->string, name);
-               g_string_append(pretty->string, COLOR_RST);
+               bt_common_g_string_append(pretty->string, color_name);
+               bt_common_g_string_append(pretty->string, name);
+               bt_common_g_string_append(pretty->string, color_rst);
        } else {
-               g_string_append(pretty->string, name);
+               bt_common_g_string_append(pretty->string, name);
        }
-       g_string_append(pretty->string, " = ");
+       bt_common_g_string_append(pretty->string, " = ");
 }
 
 static
 void print_field_name_equal(struct pretty_component *pretty, const char *name)
 {
        if (pretty->use_colors) {
-               g_string_append(pretty->string, COLOR_FIELD_NAME);
-               g_string_append(pretty->string, name);
-               g_string_append(pretty->string, COLOR_RST);
+               bt_common_g_string_append(pretty->string, color_field_name);
+               bt_common_g_string_append(pretty->string, name);
+               bt_common_g_string_append(pretty->string, color_rst);
        } else {
-               g_string_append(pretty->string, name);
-}
-       g_string_append(pretty->string, " = ");
+               bt_common_g_string_append(pretty->string, name);
+       }
+       bt_common_g_string_append(pretty->string, " = ");
 }
 
 static
@@ -110,14 +111,14 @@ void print_timestamp_wall(struct pretty_component *pretty,
        bool is_negative;
 
        if (!clock_snapshot) {
-               g_string_append(pretty->string, "??:??:??.?????????");
+               bt_common_g_string_append(pretty->string, "??:??:??.?????????");
                return;
        }
 
        ret = bt_clock_snapshot_get_ns_from_origin(clock_snapshot, &ts_nsec);
        if (ret) {
                // TODO: log, this is unexpected
-               g_string_append(pretty->string, "Error");
+               bt_common_g_string_append(pretty->string, "Error");
                return;
        }
 
@@ -201,7 +202,7 @@ void print_timestamp_wall(struct pretty_component *pretty,
                                goto seconds;
                        }
 
-                       g_string_append(pretty->string, timestr);
+                       bt_common_g_string_append(pretty->string, timestr);
                }
 
                /* Print time in HH:MM:SS.ns */
@@ -236,10 +237,10 @@ int print_event_timestamp(struct pretty_component *pretty,
        if (print_names) {
                print_name_equal(pretty, "timestamp");
        } else {
-               g_string_append(pretty->string, "[");
+               bt_common_g_string_append(pretty->string, "[");
        }
        if (pretty->use_colors) {
-               g_string_append(pretty->string, COLOR_TIMESTAMP);
+               bt_common_g_string_append(pretty->string, color_timestamp);
        }
        if (pretty->options.print_timestamp_cycles) {
                print_timestamp_cycles(pretty, clock_snapshot, true);
@@ -247,22 +248,22 @@ int print_event_timestamp(struct pretty_component *pretty,
                print_timestamp_wall(pretty, clock_snapshot, true);
        }
        if (pretty->use_colors) {
-               g_string_append(pretty->string, COLOR_RST);
+               bt_common_g_string_append(pretty->string, color_rst);
        }
 
        if (!print_names)
-               g_string_append(pretty->string, "] ");
+               bt_common_g_string_append(pretty->string, "] ");
 
        if (pretty->options.print_delta_field) {
                if (print_names) {
-                       g_string_append(pretty->string, ", ");
+                       bt_common_g_string_append(pretty->string, ", ");
                        print_name_equal(pretty, "delta");
                } else {
-                       g_string_append(pretty->string, "(");
+                       bt_common_g_string_append(pretty->string, "(");
                }
                if (pretty->options.print_timestamp_cycles) {
                        if (pretty->delta_cycles == -1ULL) {
-                               g_string_append(pretty->string,
+                               bt_common_g_string_append(pretty->string,
                                        "+??????????\?\?"); /* Not a trigraph. */
                        } else {
                                bt_common_g_string_append_printf(pretty->string,
@@ -279,11 +280,11 @@ int print_event_timestamp(struct pretty_component *pretty,
                                        "+%" PRIu64 ".%09" PRIu64,
                                        delta_sec, delta_nsec);
                        } else {
-                               g_string_append(pretty->string, "+?.?????????");
+                               bt_common_g_string_append(pretty->string, "+?.?????????");
                        }
                }
                if (!print_names) {
-                       g_string_append(pretty->string, ") ");
+                       bt_common_g_string_append(pretty->string, ") ");
                }
        }
        *start_line = !print_names;
@@ -319,16 +320,16 @@ int print_event_header(struct pretty_component *pretty,
                name = bt_trace_get_name(trace);
                if (name) {
                        if (!pretty->start_line) {
-                               g_string_append(pretty->string, ", ");
+                               bt_common_g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace");
                        }
 
-                       g_string_append(pretty->string, name);
+                       bt_common_g_string_append(pretty->string, name);
 
                        if (print_names) {
-                               g_string_append(pretty->string, ", ");
+                               bt_common_g_string_append(pretty->string, ", ");
                        }
                }
        }
@@ -341,13 +342,13 @@ int print_event_header(struct pretty_component *pretty,
                        const char *str;
 
                        if (!pretty->start_line) {
-                               g_string_append(pretty->string, ", ");
+                               bt_common_g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace:hostname");
                        }
                        str = bt_value_string_get(hostname_str);
-                       g_string_append(pretty->string, str);
+                       bt_common_g_string_append(pretty->string, str);
                        dom_print = 1;
                }
        }
@@ -360,15 +361,15 @@ int print_event_header(struct pretty_component *pretty,
                        const char *str;
 
                        if (!pretty->start_line) {
-                               g_string_append(pretty->string, ", ");
+                               bt_common_g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace:domain");
                        } else if (dom_print) {
-                               g_string_append(pretty->string, ":");
+                               bt_common_g_string_append(pretty->string, ":");
                        }
                        str = bt_value_string_get(domain_str);
-                       g_string_append(pretty->string, str);
+                       bt_common_g_string_append(pretty->string, str);
                        dom_print = 1;
                }
        }
@@ -381,15 +382,15 @@ int print_event_header(struct pretty_component *pretty,
                        const char *str;
 
                        if (!pretty->start_line) {
-                               g_string_append(pretty->string, ", ");
+                               bt_common_g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace:procname");
                        } else if (dom_print) {
-                               g_string_append(pretty->string, ":");
+                               bt_common_g_string_append(pretty->string, ":");
                        }
                        str = bt_value_string_get(procname_str);
-                       g_string_append(pretty->string, str);
+                       bt_common_g_string_append(pretty->string, str);
                        dom_print = 1;
                }
        }
@@ -402,12 +403,12 @@ int print_event_header(struct pretty_component *pretty,
                        int64_t value;
 
                        if (!pretty->start_line) {
-                               g_string_append(pretty->string, ", ");
+                               bt_common_g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace:vpid");
                        } else if (dom_print) {
-                               g_string_append(pretty->string, ":");
+                               bt_common_g_string_append(pretty->string, ":");
                        }
                        value = bt_value_integer_signed_get(vpid_value);
                        bt_common_g_string_append_printf(pretty->string,
@@ -440,18 +441,18 @@ int print_event_header(struct pretty_component *pretty,
                        &log_level);
                if (prop_avail == BT_PROPERTY_AVAILABILITY_AVAILABLE) {
                        log_level_str = log_level_names[log_level];
-                       BT_ASSERT(log_level_str);
+                       BT_ASSERT_DBG(log_level_str);
 
                        if (!pretty->start_line) {
-                               g_string_append(pretty->string, ", ");
+                               bt_common_g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "loglevel");
                        } else if (dom_print) {
-                               g_string_append(pretty->string, ":");
+                               bt_common_g_string_append(pretty->string, ":");
                        }
 
-                       g_string_append(pretty->string, log_level_str);
+                       bt_common_g_string_append(pretty->string, log_level_str);
                        bt_common_g_string_append_printf(
                                pretty->string, " (%d)", (int) log_level);
                        dom_print = 1;
@@ -463,23 +464,23 @@ int print_event_header(struct pretty_component *pretty,
                uri_str = bt_event_class_get_emf_uri(event_class);
                if (uri_str) {
                        if (!pretty->start_line) {
-                               g_string_append(pretty->string, ", ");
+                               bt_common_g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "model.emf.uri");
                        } else if (dom_print) {
-                               g_string_append(pretty->string, ":");
+                               bt_common_g_string_append(pretty->string, ":");
                        }
 
-                       g_string_append(pretty->string, uri_str);
+                       bt_common_g_string_append(pretty->string, uri_str);
                        dom_print = 1;
                }
        }
        if (dom_print && !print_names) {
-               g_string_append(pretty->string, " ");
+               bt_common_g_string_append(pretty->string, " ");
        }
        if (!pretty->start_line) {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        }
        pretty->start_line = true;
        if (print_names) {
@@ -488,23 +489,25 @@ int print_event_header(struct pretty_component *pretty,
        ev_name = bt_event_class_get_name(event_class);
        if (pretty->use_colors) {
                if (ev_name) {
-                       g_string_append(pretty->string, COLOR_EVENT_NAME);
+                       bt_common_g_string_append(pretty->string,
+                               color_event_name);
                } else {
-                       g_string_append(pretty->string, COLOR_UNKNOWN);
+                       bt_common_g_string_append(pretty->string,
+                               color_unknown);
                }
        }
        if (ev_name) {
-               g_string_append(pretty->string, ev_name);
+               bt_common_g_string_append(pretty->string, ev_name);
        } else {
-               g_string_append(pretty->string, "<unknown>");
+               bt_common_g_string_append(pretty->string, "<unknown>");
        }
        if (pretty->use_colors) {
-               g_string_append(pretty->string, COLOR_RST);
+               bt_common_g_string_append(pretty->string, color_rst);
        }
        if (!print_names) {
-               g_string_append(pretty->string, ": ");
+               bt_common_g_string_append(pretty->string, ": ");
        } else {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        }
 
 end:
@@ -526,17 +529,17 @@ int print_integer(struct pretty_component *pretty,
        bt_field_class_type ft_type;
 
        int_fc = bt_field_borrow_class_const(field);
-       BT_ASSERT(int_fc);
+       BT_ASSERT_DBG(int_fc);
        ft_type = bt_field_get_class_type(field);
-       if (ft_type == BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER ||
-                       ft_type == BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION) {
+       if (bt_field_class_type_is(ft_type,
+                       BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER)) {
                v.u = bt_field_integer_unsigned_get_value(field);
        } else {
                v.s = bt_field_integer_signed_get_value(field);
        }
 
        if (pretty->use_colors) {
-               g_string_append(pretty->string, COLOR_NUMBER_VALUE);
+               bt_common_g_string_append(pretty->string, color_number_value);
                rst_color = true;
        }
 
@@ -547,18 +550,19 @@ int print_integer(struct pretty_component *pretty,
                int bitnr, len;
 
                len = bt_field_class_integer_get_field_value_range(int_fc);
-               g_string_append(pretty->string, "0b");
+               bt_common_g_string_append(pretty->string, "0b");
                _bt_safe_lshift(v.u, 64 - len);
                for (bitnr = 0; bitnr < len; bitnr++) {
-                       bt_common_g_string_append_printf(pretty->string, "%u", (v.u & (1ULL << 63)) ? 1 : 0);
+                       bt_common_g_string_append_c(pretty->string,
+                                               (v.u & (1ULL << 63)) ? '1' : '0');
                        _bt_safe_lshift(v.u, 1);
                }
                break;
        }
        case BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_OCTAL:
        {
-               if (ft_type == BT_FIELD_CLASS_TYPE_SIGNED_INTEGER ||
-                               ft_type == BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION) {
+               if (bt_field_class_type_is(ft_type,
+                               BT_FIELD_CLASS_TYPE_SIGNED_INTEGER)) {
                        int len;
 
                        len = bt_field_class_integer_get_field_value_range(
@@ -566,7 +570,7 @@ int print_integer(struct pretty_component *pretty,
                        if (len < 64) {
                                size_t rounded_len;
 
-                               BT_ASSERT(len != 0);
+                               BT_ASSERT_DBG(len != 0);
                                /* Round length to the nearest 3-bit */
                                rounded_len = (((len - 1) / 3) + 1) * 3;
                                v.u &= ((uint64_t) 1 << rounded_len) - 1;
@@ -577,8 +581,8 @@ int print_integer(struct pretty_component *pretty,
                break;
        }
        case BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL:
-               if (ft_type == BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER ||
-                               ft_type == BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION) {
+               if (bt_field_class_type_is(ft_type,
+                               BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER)) {
                        bt_common_g_string_append_printf(pretty->string, "%" PRIu64, v.u);
                } else {
                        bt_common_g_string_append_printf(pretty->string, "%" PRId64, v.s);
@@ -605,7 +609,7 @@ int print_integer(struct pretty_component *pretty,
        }
 end:
        if (rst_color) {
-               g_string_append(pretty->string, COLOR_RST);
+               bt_common_g_string_append(pretty->string, color_rst);
        }
        return ret;
 }
@@ -615,58 +619,58 @@ void print_escape_string(struct pretty_component *pretty, const char *str)
 {
        int i;
 
-       g_string_append_c(pretty->string, '"');
+       bt_common_g_string_append_c(pretty->string, '"');
 
        for (i = 0; i < strlen(str); i++) {
                /* Escape sequences not recognized by iscntrl(). */
                switch (str[i]) {
                case '\\':
-                       g_string_append(pretty->string, "\\\\");
+                       bt_common_g_string_append(pretty->string, "\\\\");
                        continue;
                case '\'':
-                       g_string_append(pretty->string, "\\\'");
+                       bt_common_g_string_append(pretty->string, "\\\'");
                        continue;
                case '\"':
-                       g_string_append(pretty->string, "\\\"");
+                       bt_common_g_string_append(pretty->string, "\\\"");
                        continue;
                case '\?':
-                       g_string_append(pretty->string, "\\\?");
+                       bt_common_g_string_append(pretty->string, "\\\?");
                        continue;
                }
 
                /* Standard characters. */
-               if (!iscntrl(str[i])) {
-                       g_string_append_c(pretty->string, str[i]);
+               if (!iscntrl((unsigned char) str[i])) {
+                       bt_common_g_string_append_c(pretty->string, str[i]);
                        continue;
                }
 
                switch (str[i]) {
                case '\0':
-                       g_string_append(pretty->string, "\\0");
+                       bt_common_g_string_append(pretty->string, "\\0");
                        break;
                case '\a':
-                       g_string_append(pretty->string, "\\a");
+                       bt_common_g_string_append(pretty->string, "\\a");
                        break;
                case '\b':
-                       g_string_append(pretty->string, "\\b");
+                       bt_common_g_string_append(pretty->string, "\\b");
                        break;
                case '\e':
-                       g_string_append(pretty->string, "\\e");
+                       bt_common_g_string_append(pretty->string, "\\e");
                        break;
                case '\f':
-                       g_string_append(pretty->string, "\\f");
+                       bt_common_g_string_append(pretty->string, "\\f");
                        break;
                case '\n':
-                       g_string_append(pretty->string, "\\n");
+                       bt_common_g_string_append(pretty->string, "\\n");
                        break;
                case '\r':
-                       g_string_append(pretty->string, "\\r");
+                       bt_common_g_string_append(pretty->string, "\\r");
                        break;
                case '\t':
-                       g_string_append(pretty->string, "\\t");
+                       bt_common_g_string_append(pretty->string, "\\t");
                        break;
                case '\v':
-                       g_string_append(pretty->string, "\\v");
+                       bt_common_g_string_append(pretty->string, "\\v");
                        break;
                default:
                        /* Unhandled control-sequence, print as hex. */
@@ -675,7 +679,7 @@ void print_escape_string(struct pretty_component *pretty, const char *str)
                }
        }
 
-       g_string_append_c(pretty->string, '"');
+       bt_common_g_string_append_c(pretty->string, '"');
 }
 
 static
@@ -704,7 +708,7 @@ int print_enum(struct pretty_component *pretty,
                        &label_array, &label_count);
                break;
        default:
-               abort();
+               bt_common_abort();
        }
 
        if (ret) {
@@ -712,14 +716,14 @@ int print_enum(struct pretty_component *pretty,
                goto end;
        }
 
-       g_string_append(pretty->string, "( ");
+       bt_common_g_string_append(pretty->string, "( ");
        if (label_count == 0) {
                if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_UNKNOWN);
+                       bt_common_g_string_append(pretty->string, color_unknown);
                }
-               g_string_append(pretty->string, "<unknown>");
+               bt_common_g_string_append(pretty->string, "<unknown>");
                if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_RST);
+                       bt_common_g_string_append(pretty->string, color_rst);
                }
                goto skip_loop;
        }
@@ -727,23 +731,23 @@ int print_enum(struct pretty_component *pretty,
                const char *mapping_name = label_array[i];
 
                if (i != 0) {
-                       g_string_append(pretty->string, ", ");
+                       bt_common_g_string_append(pretty->string, ", ");
                }
                if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_ENUM_MAPPING_NAME);
+                       bt_common_g_string_append(pretty->string, color_enum_mapping_name);
                }
                print_escape_string(pretty, mapping_name);
                if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_RST);
+                       bt_common_g_string_append(pretty->string, color_rst);
                }
        }
 skip_loop:
-       g_string_append(pretty->string, " : container = ");
+       bt_common_g_string_append(pretty->string, " : container = ");
        ret = print_integer(pretty, field);
        if (ret != 0) {
                goto end;
        }
-       g_string_append(pretty->string, " )");
+       bt_common_g_string_append(pretty->string, " )");
 end:
        return ret;
 }
@@ -770,9 +774,9 @@ int print_struct_field(struct pretty_component *pretty,
        field_name = bt_field_class_structure_member_get_name(member);
 
        if (*nr_printed_fields > 0) {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        } else {
-               g_string_append(pretty->string, " ");
+               bt_common_g_string_append(pretty->string, " ");
        }
        if (print_names) {
                print_field_name_equal(pretty, field_name);
@@ -800,7 +804,7 @@ int print_struct(struct pretty_component *pretty,
 
        nr_fields = bt_field_class_structure_get_member_count(struct_class);
 
-       g_string_append(pretty->string, "{");
+       bt_common_g_string_append(pretty->string, "{");
        pretty->depth++;
        nr_printed_fields = 0;
        for (i = 0; i < nr_fields; i++) {
@@ -811,7 +815,7 @@ int print_struct(struct pretty_component *pretty,
                }
        }
        pretty->depth--;
-       g_string_append(pretty->string, " }");
+       bt_common_g_string_append(pretty->string, " }");
 
 end:
        return ret;
@@ -824,16 +828,16 @@ int print_array_field(struct pretty_component *pretty,
        const bt_field *field = NULL;
 
        if (i != 0) {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        } else {
-               g_string_append(pretty->string, " ");
+               bt_common_g_string_append(pretty->string, " ");
        }
        if (print_names) {
                bt_common_g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i);
        }
 
        field = bt_field_array_borrow_element_field_by_index_const(array, i);
-       BT_ASSERT(field);
+       BT_ASSERT_DBG(field);
        return print_field(pretty, field, print_names);
 }
 
@@ -852,7 +856,7 @@ int print_array(struct pretty_component *pretty,
                goto end;
        }
        len = bt_field_array_get_length(array);
-       g_string_append(pretty->string, "[");
+       bt_common_g_string_append(pretty->string, "[");
        pretty->depth++;
        for (i = 0; i < len; i++) {
                ret = print_array_field(pretty, array, i, print_names);
@@ -861,7 +865,7 @@ int print_array(struct pretty_component *pretty,
                }
        }
        pretty->depth--;
-       g_string_append(pretty->string, " ]");
+       bt_common_g_string_append(pretty->string, " ]");
 
 end:
        return ret;
@@ -874,16 +878,16 @@ int print_sequence_field(struct pretty_component *pretty,
        const bt_field *field = NULL;
 
        if (i != 0) {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        } else {
-               g_string_append(pretty->string, " ");
+               bt_common_g_string_append(pretty->string, " ");
        }
        if (print_names) {
                bt_common_g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i);
        }
 
        field = bt_field_array_borrow_element_field_by_index_const(seq, i);
-       BT_ASSERT(field);
+       BT_ASSERT_DBG(field);
        return print_field(pretty, field, print_names);
 }
 
@@ -896,7 +900,7 @@ int print_sequence(struct pretty_component *pretty,
        uint64_t i;
 
        len = bt_field_array_get_length(seq);
-       g_string_append(pretty->string, "[");
+       bt_common_g_string_append(pretty->string, "[");
 
        pretty->depth++;
        for (i = 0; i < len; i++) {
@@ -906,7 +910,36 @@ int print_sequence(struct pretty_component *pretty,
                }
        }
        pretty->depth--;
-       g_string_append(pretty->string, " ]");
+       bt_common_g_string_append(pretty->string, " ]");
+
+end:
+       return ret;
+}
+
+static
+int print_option(struct pretty_component *pretty,
+               const bt_field *option, bool print_names)
+{
+       int ret = 0;
+       const bt_field *field = NULL;
+
+       field = bt_field_option_borrow_field_const(option);
+       if (field) {
+               bt_common_g_string_append(pretty->string, "{ ");
+               pretty->depth++;
+               if (print_names) {
+                       // TODO: find tag's name using field path
+                       // print_field_name_equal(pretty, tag_choice);
+               }
+               ret = print_field(pretty, field, print_names);
+               if (ret != 0) {
+                       goto end;
+               }
+               pretty->depth--;
+               bt_common_g_string_append(pretty->string, " }");
+       } else {
+               bt_common_g_string_append(pretty->string, "<none>");
+       }
 
 end:
        return ret;
@@ -920,8 +953,8 @@ int print_variant(struct pretty_component *pretty,
        const bt_field *field = NULL;
 
        field = bt_field_variant_borrow_selected_option_field_const(variant);
-       BT_ASSERT(field);
-       g_string_append(pretty->string, "{ ");
+       BT_ASSERT_DBG(field);
+       bt_common_g_string_append(pretty->string, "{ ");
        pretty->depth++;
        if (print_names) {
                // TODO: find tag's name using field path
@@ -932,7 +965,7 @@ int print_variant(struct pretty_component *pretty,
                goto end;
        }
        pretty->depth--;
-       g_string_append(pretty->string, " }");
+       bt_common_g_string_append(pretty->string, " }");
 
 end:
        return ret;
@@ -945,29 +978,62 @@ int print_field(struct pretty_component *pretty,
        bt_field_class_type class_id;
 
        class_id = bt_field_get_class_type(field);
-       switch (class_id) {
-       case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER:
-       case BT_FIELD_CLASS_TYPE_SIGNED_INTEGER:
+       if (class_id == BT_FIELD_CLASS_TYPE_BOOL) {
+               bt_bool v;
+               const char *text;
+
+               v = bt_field_bool_get_value(field);
+               if (pretty->use_colors) {
+                       bt_common_g_string_append(pretty->string, color_number_value);
+               }
+               if (v) {
+                       text = "true";
+               } else {
+                       text = "false";
+               }
+               bt_common_g_string_append(pretty->string, text);
+               if (pretty->use_colors) {
+                       bt_common_g_string_append(pretty->string, color_rst);
+               }
+               return 0;
+       } else if (class_id == BT_FIELD_CLASS_TYPE_BIT_ARRAY) {
+               uint64_t v = bt_field_bit_array_get_value_as_integer(field);
+
+               if (pretty->use_colors) {
+                       bt_common_g_string_append(pretty->string,
+                               color_number_value);
+               }
+               bt_common_g_string_append_printf(pretty->string, "0x%" PRIX64,
+                       v);
+               if (pretty->use_colors) {
+                       bt_common_g_string_append(pretty->string, color_rst);
+               }
+               return 0;
+       } else if (bt_field_class_type_is(class_id,
+                       BT_FIELD_CLASS_TYPE_ENUMERATION)) {
+               return print_enum(pretty, field);
+       } else if (bt_field_class_type_is(class_id,
+                       BT_FIELD_CLASS_TYPE_INTEGER)) {
                return print_integer(pretty, field);
-       case BT_FIELD_CLASS_TYPE_REAL:
-       {
+       } else if (bt_field_class_type_is(class_id,
+                       BT_FIELD_CLASS_TYPE_REAL)) {
                double v;
 
-               v = bt_field_real_get_value(field);
+               if (class_id == BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL) {
+                       v = bt_field_real_single_precision_get_value(field);
+               } else {
+                       v = bt_field_real_double_precision_get_value(field);
+               }
+
                if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_NUMBER_VALUE);
+                       bt_common_g_string_append(pretty->string, color_number_value);
                }
                bt_common_g_string_append_printf(pretty->string, "%g", v);
                if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_RST);
+                       bt_common_g_string_append(pretty->string, color_rst);
                }
                return 0;
-       }
-       case BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION:
-       case BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION:
-               return print_enum(pretty, field);
-       case BT_FIELD_CLASS_TYPE_STRING:
-       {
+       } else if (class_id == BT_FIELD_CLASS_TYPE_STRING) {
                const char *str;
 
                str = bt_field_string_get_value(field);
@@ -976,25 +1042,27 @@ int print_field(struct pretty_component *pretty,
                }
 
                if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_STRING_VALUE);
+                       bt_common_g_string_append(pretty->string, color_string_value);
                }
                print_escape_string(pretty, str);
                if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_RST);
+                       bt_common_g_string_append(pretty->string, color_rst);
                }
                return 0;
-       }
-       case BT_FIELD_CLASS_TYPE_STRUCTURE:
+       } else if (class_id == BT_FIELD_CLASS_TYPE_STRUCTURE) {
                return print_struct(pretty, field, print_names);
-       case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR:
-       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR:
-       case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR:
+       } else if (bt_field_class_type_is(class_id,
+                       BT_FIELD_CLASS_TYPE_OPTION)) {
+               return print_option(pretty, field, print_names);
+       } else if (bt_field_class_type_is(class_id,
+                       BT_FIELD_CLASS_TYPE_VARIANT)) {
                return print_variant(pretty, field, print_names);
-       case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
+       } else if (class_id == BT_FIELD_CLASS_TYPE_STATIC_ARRAY) {
                return print_array(pretty, field, print_names);
-       case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY:
+       } else if (bt_field_class_type_is(class_id,
+                       BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY)) {
                return print_sequence(pretty, field, print_names);
-       default:
+       } else {
                // TODO: log instead
                fprintf(pretty->err, "[error] Unknown type id: %d\n", (int) class_id);
                return -1;
@@ -1018,7 +1086,7 @@ int print_stream_packet_context(struct pretty_component *pretty,
                goto end;
        }
        if (!pretty->start_line) {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1043,7 +1111,7 @@ int print_stream_event_context(struct pretty_component *pretty,
                goto end;
        }
        if (!pretty->start_line) {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1068,7 +1136,7 @@ int print_event_context(struct pretty_component *pretty,
                goto end;
        }
        if (!pretty->start_line) {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1093,7 +1161,7 @@ int print_event_payload(struct pretty_component *pretty,
                goto end;
        }
        if (!pretty->start_line) {
-               g_string_append(pretty->string, ", ");
+               bt_common_g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1131,7 +1199,7 @@ int pretty_print_event(struct pretty_component *pretty,
        const bt_event *event =
                bt_message_event_borrow_event_const(event_msg);
 
-       BT_ASSERT(event);
+       BT_ASSERT_DBG(event);
        pretty->start_line = true;
        g_string_assign(pretty->string, "");
        ret = print_event_header(pretty, event_msg);
@@ -1159,7 +1227,7 @@ int pretty_print_event(struct pretty_component *pretty,
                goto end;
        }
 
-       g_string_append_c(pretty->string, '\n');
+       bt_common_g_string_append_c(pretty->string, '\n');
        if (flush_buf(pretty->out, pretty)) {
                ret = -1;
                goto end;
@@ -1235,16 +1303,16 @@ int print_discarded_elements_msg(struct pretty_component *pretty,
                        count == 1 ? "" : "s");
        }
 
-       g_string_append_c(pretty->string, ' ');
+       bt_common_g_string_append_c(pretty->string, ' ');
 
        if (begin_clock_snapshot && end_clock_snapshot) {
-               g_string_append(pretty->string, "between [");
+               bt_common_g_string_append(pretty->string, "between [");
                print_timestamp_wall(pretty, begin_clock_snapshot, false);
-               g_string_append(pretty->string, "] and [");
+               bt_common_g_string_append(pretty->string, "] and [");
                print_timestamp_wall(pretty, end_clock_snapshot, false);
-               g_string_append(pretty->string, "]");
+               bt_common_g_string_append(pretty->string, "]");
        } else {
-               g_string_append(pretty->string, "(unknown time range)");
+               bt_common_g_string_append(pretty->string, "(unknown time range)");
        }
 
        bt_common_g_string_append_printf(pretty->string, " in trace \"%s\" ", trace_name);
@@ -1254,7 +1322,7 @@ int print_discarded_elements_msg(struct pretty_component *pretty,
                        "(UUID: " BT_UUID_FMT ") ",
                        BT_UUID_FMT_VALUES(trace_uuid));
        } else {
-               g_string_append(pretty->string, "(no UUID) ");
+               bt_common_g_string_append(pretty->string, "(no UUID) ");
        }
 
        bt_common_g_string_append_printf(pretty->string,
@@ -1265,7 +1333,7 @@ int print_discarded_elements_msg(struct pretty_component *pretty,
                bt_common_g_string_append_printf(pretty->string,
                        "stream ID: %" PRIu64, stream_id);
        } else {
-               g_string_append(pretty->string, "no stream ID");
+               bt_common_g_string_append(pretty->string, "no stream ID");
        }
 
        bt_common_g_string_append_printf(pretty->string, ").%s\n",
@@ -1315,7 +1383,7 @@ int pretty_print_discarded_items(struct pretty_component *pretty,
                elem_type = "packet";
                break;
        default:
-               abort();
+               bt_common_abort();
        }
 
        BT_ASSERT(stream);
@@ -1343,10 +1411,27 @@ int pretty_print_discarded_items(struct pretty_component *pretty,
 
                break;
        default:
-               abort();
+               bt_common_abort();
        }
 
        print_discarded_elements_msg(pretty, stream, begin, end,
                count, elem_type);
        return 0;
 }
+
+BT_HIDDEN
+void pretty_print_init(void)
+{
+       strcpy(color_name, bt_common_color_bold());
+       strcpy(color_field_name, bt_common_color_fg_cyan());
+       strcpy(color_rst, bt_common_color_reset());
+       strcpy(color_string_value, bt_common_color_bold());
+       strcpy(color_number_value, bt_common_color_bold());
+       strcpy(color_enum_mapping_name, bt_common_color_bold());
+       strcpy(color_unknown, bt_common_color_bold());
+       strcat(color_unknown, bt_common_color_fg_bright_red());
+       strcpy(color_event_name, bt_common_color_bold());
+       strcat(color_event_name, bt_common_color_fg_bright_magenta());
+       strcpy(color_timestamp, bt_common_color_bold());
+       strcat(color_timestamp, bt_common_color_fg_bright_yellow());
+}
This page took 0.062012 seconds and 4 git commands to generate.