text.pretty: create an event string instead of using fprintf()/fputs()
[babeltrace.git] / plugins / text / pretty / print.c
index 3615cfd07ecf1597a5c406f6b66f66fd467ca885..6cba7ce0997b116fea208f337cc140c50af7e01e 100644 (file)
 
 #define NSEC_PER_SEC 1000000000LL
 
-#define COLOR_NAME                     BT_COMMON_COLOR_BOLD
+#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_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
+#define COLOR_TIMESTAMP                BT_COMMON_COLOR_BOLD BT_COMMON_COLOR_FG_YELLOW
 
 static inline
 const char *rem_(const char *str)
@@ -79,9 +79,10 @@ static
 void print_name_equal(struct pretty_component *pretty, const char *name)
 {
        if (pretty->use_colors) {
-               fprintf(pretty->out, "%s%s%s = ", COLOR_NAME, name, COLOR_RST);
+               g_string_append_printf(pretty->string, "%s%s%s = ", COLOR_NAME,
+                       name, COLOR_RST);
        } else {
-               fprintf(pretty->out, "%s = ", name);
+               g_string_append_printf(pretty->string, "%s = ", name);
        }
 }
 
@@ -89,10 +90,10 @@ static
 void print_field_name_equal(struct pretty_component *pretty, const char *name)
 {
        if (pretty->use_colors) {
-               fprintf(pretty->out, "%s%s%s = ", COLOR_FIELD_NAME, name,
-                       COLOR_RST);
+               g_string_append_printf(pretty->string, "%s%s%s = ",
+                       COLOR_FIELD_NAME, name, COLOR_RST);
        } else {
-               fprintf(pretty->out, "%s = ", name);
+               g_string_append_printf(pretty->string, "%s = ", name);
        }
 }
 
@@ -107,17 +108,19 @@ void print_timestamp_cycles(struct pretty_component *pretty,
 
        clock_value = bt_ctf_event_get_clock_value(event, clock_class);
        if (!clock_value) {
-               fputs("????????????????????", pretty->out);
+               g_string_append(pretty->string, "????????????????????");
                return;
        }
 
        ret = bt_ctf_clock_value_get_value(clock_value, &cycles);
        bt_put(clock_value);
        if (ret) {
-               fprintf(pretty->out, "Error");
+               // TODO: log, this is unexpected
+               g_string_append(pretty->string, "Error");
                return;
        }
-       fprintf(pretty->out, "%020" PRIu64, cycles);
+
+       g_string_append_printf(pretty->string, "%020" PRIu64, cycles);
 
        if (pretty->last_cycles_timestamp != -1ULL) {
                pretty->delta_cycles = cycles - pretty->last_cycles_timestamp;
@@ -139,24 +142,26 @@ void print_timestamp_wall(struct pretty_component *pretty,
 
        clock_value = bt_ctf_event_get_clock_value(event, clock_class);
        if (!clock_value) {
-               fputs("??:??:??.?????????", pretty->out);
+               g_string_append(pretty->string, "??:??:??.?????????");
                return;
        }
 
        ret = bt_ctf_clock_value_get_value_ns_from_epoch(clock_value, &ts_nsec);
        bt_put(clock_value);
        if (ret) {
-               fprintf(pretty->out, "Error");
+               // TODO: log, this is unexpected
+               g_string_append(pretty->string, "Error");
                return;
        }
 
        if (pretty->last_real_timestamp != -1ULL) {
                pretty->delta_real_timestamp = ts_nsec - pretty->last_real_timestamp;
        }
-       pretty->last_real_timestamp = ts_nsec;
 
+       pretty->last_real_timestamp = ts_nsec;
        ts_sec += ts_nsec / NSEC_PER_SEC;
        ts_nsec = ts_nsec % NSEC_PER_SEC;
+
        if (ts_sec >= 0 && ts_nsec >= 0) {
                is_negative = false;
                ts_sec_abs = ts_sec;
@@ -188,6 +193,7 @@ void print_timestamp_wall(struct pretty_component *pretty,
                time_t time_s = (time_t) ts_sec_abs;
 
                if (is_negative) {
+                       // TODO: log instead
                        fprintf(stderr, "[warning] Fallback to [sec.ns] to print negative time value. Use --clock-seconds.\n");
                        goto seconds;
                }
@@ -197,6 +203,7 @@ void print_timestamp_wall(struct pretty_component *pretty,
 
                        res = localtime_r(&time_s, &tm);
                        if (!res) {
+                               // TODO: log instead
                                fprintf(stderr, "[warning] Unable to get localtime.\n");
                                goto seconds;
                        }
@@ -205,6 +212,7 @@ void print_timestamp_wall(struct pretty_component *pretty,
 
                        res = gmtime_r(&time_s, &tm);
                        if (!res) {
+                               // TODO: log instead
                                fprintf(stderr, "[warning] Unable to get gmtime.\n");
                                goto seconds;
                        }
@@ -217,19 +225,23 @@ void print_timestamp_wall(struct pretty_component *pretty,
                        res = strftime(timestr, sizeof(timestr),
                                        "%F ", &tm);
                        if (!res) {
+                               // TODO: log instead
                                fprintf(stderr, "[warning] Unable to print ascii time.\n");
                                goto seconds;
                        }
-                       fprintf(pretty->out, "%s", timestr);
+
+                       g_string_append(pretty->string, timestr);
                }
+
                /* Print time in HH:MM:SS.ns */
-               fprintf(pretty->out, "%02d:%02d:%02d.%09" PRIu64,
-                               tm.tm_hour, tm.tm_min, tm.tm_sec, ts_nsec_abs);
+               g_string_append_printf(pretty->string,
+                       "%02d:%02d:%02d.%09" PRIu64, tm.tm_hour, tm.tm_min,
+                       tm.tm_sec, ts_nsec_abs);
                goto end;
        }
 seconds:
-       fprintf(pretty->out, "%s%" PRId64 ".%09" PRIu64,
-                       is_negative ? "-" : "", ts_sec_abs, ts_nsec_abs);
+       g_string_append_printf(pretty->string, "%s%" PRId64 ".%09" PRIu64,
+               is_negative ? "-" : "", ts_sec_abs, ts_nsec_abs);
 end:
        return;
 }
@@ -246,7 +258,6 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty,
        struct bt_ctf_stream_class *stream_class = NULL;
        struct bt_ctf_trace *trace = NULL;
        struct bt_ctf_clock_class *clock_class = NULL;
-       FILE *out = pretty->out;
 
        stream = bt_ctf_event_get_stream(event);
        if (!stream) {
@@ -281,10 +292,10 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty,
        if (print_names) {
                print_name_equal(pretty, "timestamp");
        } else {
-               fputs("[", out);
+               g_string_append(pretty->string, "[");
        }
        if (pretty->use_colors) {
-               fputs(COLOR_TIMESTAMP, pretty->out);
+               g_string_append(pretty->string, COLOR_TIMESTAMP);
        }
        if (pretty->options.print_timestamp_cycles) {
                print_timestamp_cycles(pretty, clock_class, event);
@@ -292,24 +303,26 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty,
                print_timestamp_wall(pretty, clock_class, event);
        }
        if (pretty->use_colors) {
-               fputs(COLOR_RST, pretty->out);
+               g_string_append(pretty->string, COLOR_RST);
        }
 
        if (!print_names)
-               fputs("] ", out);
+               g_string_append(pretty->string, "] ");
 
        if (pretty->options.print_delta_field) {
                if (print_names) {
-                       fputs(", ", pretty->out);
+                       g_string_append(pretty->string, ", ");
                        print_name_equal(pretty, "delta");
                } else {
-                       fputs("(", pretty->out);
+                       g_string_append(pretty->string, "(");
                }
                if (pretty->options.print_timestamp_cycles) {
                        if (pretty->delta_cycles == -1ULL) {
-                               fputs("+??????????\?\?) ", pretty->out); /* Not a trigraph. */
+                               g_string_append(pretty->string,
+                                       "+??????????\?\?) "); /* Not a trigraph. */
                        } else {
-                               fprintf(pretty->out, "+%012" PRIu64, pretty->delta_cycles);
+                               g_string_append_printf(pretty->string,
+                                       "+%012" PRIu64, pretty->delta_cycles);
                        }
                } else {
                        if (pretty->delta_real_timestamp != -1ULL) {
@@ -318,14 +331,15 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty,
                                delta = pretty->delta_real_timestamp;
                                delta_sec = delta / NSEC_PER_SEC;
                                delta_nsec = delta % NSEC_PER_SEC;
-                               fprintf(pretty->out, "+%" PRIu64 ".%09" PRIu64,
+                               g_string_append_printf(pretty->string,
+                                       "+%" PRIu64 ".%09" PRIu64,
                                        delta_sec, delta_nsec);
                        } else {
-                               fputs("+?.?????????", pretty->out);
+                               g_string_append(pretty->string, "+?.?????????");
                        }
                }
                if (!print_names) {
-                       fputs(") ", pretty->out);
+                       g_string_append(pretty->string, ") ");
                }
        }
        *start_line = !print_names;
@@ -376,14 +390,16 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                name = bt_ctf_trace_get_name(trace_class);
                if (name) {
                        if (!pretty->start_line) {
-                               fputs(", ", pretty->out);
+                               g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace");
                        }
-                       fprintf(pretty->out, "%s", name);
+
+                       g_string_append(pretty->string, name);
+
                        if (!print_names) {
-                               fprintf(pretty->out, " ");
+                               g_string_append(pretty->string, " ");
                        }
                }
        }
@@ -396,14 +412,14 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                        const char *str;
 
                        if (!pretty->start_line) {
-                               fputs(", ", pretty->out);
+                               g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace:hostname");
                        }
                        if (bt_value_string_get(hostname_str, &str)
                                        == BT_VALUE_STATUS_OK) {
-                               fprintf(pretty->out, "%s", str);
+                               g_string_append(pretty->string, str);
                        }
                        bt_put(hostname_str);
                        dom_print = 1;
@@ -418,16 +434,16 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                        const char *str;
 
                        if (!pretty->start_line) {
-                               fputs(", ", pretty->out);
+                               g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace:domain");
                        } else if (dom_print) {
-                               fputs(":", pretty->out);
+                               g_string_append(pretty->string, ":");
                        }
                        if (bt_value_string_get(domain_str, &str)
                                        == BT_VALUE_STATUS_OK) {
-                               fprintf(pretty->out, "%s", str);
+                               g_string_append(pretty->string, str);
                        }
                        bt_put(domain_str);
                        dom_print = 1;
@@ -442,16 +458,16 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                        const char *str;
 
                        if (!pretty->start_line) {
-                               fputs(", ", pretty->out);
+                               g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace:procname");
                        } else if (dom_print) {
-                               fputs(":", pretty->out);
+                               g_string_append(pretty->string, ":");
                        }
                        if (bt_value_string_get(procname_str, &str)
                                        == BT_VALUE_STATUS_OK) {
-                               fprintf(pretty->out, "%s", str);
+                               g_string_append(pretty->string, str);
                        }
                        bt_put(procname_str);
                        dom_print = 1;
@@ -466,16 +482,16 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                        int64_t value;
 
                        if (!pretty->start_line) {
-                               fputs(", ", pretty->out);
+                               g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "trace:vpid");
                        } else if (dom_print) {
-                               fputs(":", pretty->out);
+                               g_string_append(pretty->string, ":");
                        }
                        if (bt_value_integer_get(vpid_value, &value)
                                        == BT_VALUE_STATUS_OK) {
-                               fprintf(pretty->out, "(%" PRId64 ")", value);
+                               g_string_append_printf(pretty->string, "(%" PRId64 ")", value);
                        }
                        bt_put(vpid_value);
                        dom_print = 1;
@@ -492,19 +508,19 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                        bool has_str = false;
 
                        if (!pretty->start_line) {
-                               fputs(", ", pretty->out);
+                               g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "loglevel");
                        } else if (dom_print) {
-                               fputs(":", pretty->out);
+                               g_string_append(pretty->string, ":");
                        }
                        if (loglevel_str) {
                                const char *str;
 
                                if (bt_value_string_get(loglevel_str, &str)
                                                == BT_VALUE_STATUS_OK) {
-                                       fprintf(pretty->out, "%s", str);
+                                       g_string_append(pretty->string, str);
                                        has_str = true;
                                }
                        }
@@ -513,7 +529,7 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
 
                                if (bt_value_integer_get(loglevel_value, &value)
                                                == BT_VALUE_STATUS_OK) {
-                                       fprintf(pretty->out, "%s(%" PRId64 ")",
+                                       g_string_append_printf(pretty->string, "%s(%" PRId64 ")",
                                                has_str ? " " : "", value);
                                }
                        }
@@ -529,19 +545,19 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                                "model.emf.uri");
                if (uri_str) {
                        if (!pretty->start_line) {
-                               fputs(", ", pretty->out);
+                               g_string_append(pretty->string, ", ");
                        }
                        if (print_names) {
                                print_name_equal(pretty, "model.emf.uri");
                        } else if (dom_print) {
-                               fputs(":", pretty->out);
+                               g_string_append(pretty->string, ":");
                        }
                        if (uri_str) {
                                const char *str;
 
                                if (bt_value_string_get(uri_str, &str)
                                                == BT_VALUE_STATUS_OK) {
-                                       fprintf(pretty->out, "%s", str);
+                                       g_string_append(pretty->string, str);
                                }
                        }
                        bt_put(uri_str);
@@ -549,26 +565,26 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                }
        }
        if (dom_print && !print_names) {
-               fputs(" ", pretty->out);
+               g_string_append(pretty->string, " ");
        }
        if (!pretty->start_line) {
-               fputs(", ", pretty->out);
+               g_string_append(pretty->string, ", ");
        }
        pretty->start_line = true;
        if (print_names) {
                print_name_equal(pretty, "name");
        }
        if (pretty->use_colors) {
-               fputs(COLOR_EVENT_NAME, pretty->out);
+               g_string_append(pretty->string, COLOR_EVENT_NAME);
        }
-       fputs(bt_ctf_event_class_get_name(event_class), pretty->out);
+       g_string_append(pretty->string, bt_ctf_event_class_get_name(event_class));
        if (pretty->use_colors) {
-               fputs(COLOR_RST, pretty->out);
+               g_string_append(pretty->string, COLOR_RST);
        }
        if (!print_names) {
-               fputs(": ", pretty->out);
+               g_string_append(pretty->string, ": ");
        } else {
-               fputs(", ", pretty->out);
+               g_string_append(pretty->string, ", ");
        }
 end:
        bt_put(trace_class);
@@ -618,7 +634,7 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
        switch (encoding) {
        case BT_CTF_STRING_ENCODING_UTF8:
        case BT_CTF_STRING_ENCODING_ASCII:
-               g_string_append_c(pretty->string, (int) v.u);
+               g_string_append_c(pretty->tmp_string, (int) v.u);
                goto end;
        case BT_CTF_STRING_ENCODING_NONE:
        case BT_CTF_STRING_ENCODING_UNKNOWN:
@@ -629,7 +645,7 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
        }
 
        if (pretty->use_colors) {
-               fputs(COLOR_NUMBER_VALUE, pretty->out);
+               g_string_append(pretty->string, COLOR_NUMBER_VALUE);
                rst_color = true;
        }
 
@@ -644,10 +660,10 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
                        ret = BT_COMPONENT_STATUS_ERROR;
                        goto end;
                }
-               fprintf(pretty->out, "0b");
+               g_string_append(pretty->string, "0b");
                v.u = _bt_piecewise_lshift(v.u, 64 - len);
                for (bitnr = 0; bitnr < len; bitnr++) {
-                       fprintf(pretty->out, "%u", (v.u & (1ULL << 63)) ? 1 : 0);
+                       g_string_append_printf(pretty->string, "%u", (v.u & (1ULL << 63)) ? 1 : 0);
                        v.u = _bt_piecewise_lshift(v.u, 1);
                }
                break;
@@ -672,14 +688,14 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
                        }
                }
 
-               fprintf(pretty->out, "0%" PRIo64, v.u);
+               g_string_append_printf(pretty->string, "0%" PRIo64, v.u);
                break;
        }
        case BT_CTF_INTEGER_BASE_DECIMAL:
                if (!signedness) {
-                       fprintf(pretty->out, "%" PRIu64, v.u);
+                       g_string_append_printf(pretty->string, "%" PRIu64, v.u);
                } else {
-                       fprintf(pretty->out, "%" PRId64, v.s);
+                       g_string_append_printf(pretty->string, "%" PRId64, v.s);
                }
                break;
        case BT_CTF_INTEGER_BASE_HEXADECIMAL:
@@ -698,7 +714,7 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
                        v.u &= ((uint64_t) 1 << rounded_len) - 1;
                }
 
-               fprintf(pretty->out, "0x%" PRIX64, v.u);
+               g_string_append_printf(pretty->string, "0x%" PRIX64, v.u);
                break;
        }
        default:
@@ -707,7 +723,7 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
        }
 end:
        if (rst_color) {
-               fputs(COLOR_RST, pretty->out);
+               g_string_append(pretty->string, COLOR_RST);
        }
        bt_put(field_type);
        return ret;
@@ -718,65 +734,67 @@ void print_escape_string(struct pretty_component *pretty, const char *str)
 {
        int i;
 
-       fputc('"', pretty->out);
+       g_string_append_c(pretty->string, '"');
+
        for (i = 0; i < strlen(str); i++) {
                /* Escape sequences not recognized by iscntrl(). */
                switch (str[i]) {
                case '\\':
-                       fputs("\\\\", pretty->out);
+                       g_string_append(pretty->string, "\\\\");
                        continue;
                case '\'':
-                       fputs("\\\'", pretty->out);
+                       g_string_append(pretty->string, "\\\'");
                        continue;
                case '\"':
-                       fputs("\\\"", pretty->out);
+                       g_string_append(pretty->string, "\\\"");
                        continue;
                case '\?':
-                       fputs("\\\?", pretty->out);
+                       g_string_append(pretty->string, "\\\?");
                        continue;
                }
 
                /* Standard characters. */
                if (!iscntrl(str[i])) {
-                       fputc(str[i], pretty->out);
+                       g_string_append_c(pretty->string, str[i]);
                        continue;
                }
 
                switch (str[i]) {
                case '\0':
-                       fputs("\\0", pretty->out);
+                       g_string_append(pretty->string, "\\0");
                        break;
                case '\a':
-                       fputs("\\a", pretty->out);
+                       g_string_append(pretty->string, "\\a");
                        break;
                case '\b':
-                       fputs("\\b", pretty->out);
+                       g_string_append(pretty->string, "\\b");
                        break;
                case '\e':
-                       fputs("\\e", pretty->out);
+                       g_string_append(pretty->string, "\\e");
                        break;
                case '\f':
-                       fputs("\\f", pretty->out);
+                       g_string_append(pretty->string, "\\f");
                        break;
                case '\n':
-                       fputs("\\n", pretty->out);
+                       g_string_append(pretty->string, "\\n");
                        break;
                case '\r':
-                       fputs("\\r", pretty->out);
+                       g_string_append(pretty->string, "\\r");
                        break;
                case '\t':
-                       fputs("\\t", pretty->out);
+                       g_string_append(pretty->string, "\\t");
                        break;
                case '\v':
-                       fputs("\\v", pretty->out);
+                       g_string_append(pretty->string, "\\v");
                        break;
                default:
                        /* Unhandled control-sequence, print as hex. */
-                       fprintf(pretty->out, "\\x%02x", str[i]);
+                       g_string_append_printf(pretty->string, "\\x%02x", str[i]);
                        break;
                }
        }
-       fputc('"', pretty->out);
+
+       g_string_append_c(pretty->string, '"');
 }
 
 static
@@ -836,7 +854,7 @@ enum bt_component_status print_enum(struct pretty_component *pretty,
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       fprintf(pretty->out, "( ");
+       g_string_append(pretty->string, "( ");
        for (;;) {
                const char *mapping_name;
 
@@ -846,13 +864,13 @@ enum bt_component_status print_enum(struct pretty_component *pretty,
                        goto end;
                }
                if (nr_mappings++)
-                       fprintf(pretty->out, ", ");
+                       g_string_append(pretty->string, ", ");
                if (pretty->use_colors) {
-                       fputs(COLOR_ENUM_MAPPING_NAME, pretty->out);
+                       g_string_append(pretty->string, COLOR_ENUM_MAPPING_NAME);
                }
                print_escape_string(pretty, mapping_name);
                if (pretty->use_colors) {
-                       fputs(COLOR_RST, pretty->out);
+                       g_string_append(pretty->string, COLOR_RST);
                }
                if (bt_ctf_field_type_enumeration_mapping_iterator_next(iter) < 0) {
                        break;
@@ -860,19 +878,19 @@ enum bt_component_status print_enum(struct pretty_component *pretty,
        }
        if (!nr_mappings) {
                if (pretty->use_colors) {
-                       fputs(COLOR_UNKNOWN, pretty->out);
+                       g_string_append(pretty->string, COLOR_UNKNOWN);
                }
-               fprintf(pretty->out, "<unknown>");
+               g_string_append(pretty->string, "<unknown>");
                if (pretty->use_colors) {
-                       fputs(COLOR_RST, pretty->out);
+                       g_string_append(pretty->string, COLOR_RST);
                }
        }
-       fprintf(pretty->out, " : container = ");
+       g_string_append(pretty->string, " : container = ");
        ret = print_integer(pretty, container_field);
        if (ret != BT_COMPONENT_STATUS_OK) {
                goto end;
        }
-       fprintf(pretty->out, " )");
+       g_string_append(pretty->string, " )");
 end:
        bt_put(iter);
        bt_put(container_field_type);
@@ -930,9 +948,9 @@ enum bt_component_status print_struct_field(struct pretty_component *pretty,
        }
 
        if (*nr_printed_fields > 0) {
-               fprintf(pretty->out, ", ");
+               g_string_append(pretty->string, ", ");
        } else {
-               fprintf(pretty->out, " ");
+               g_string_append(pretty->string, " ");
        }
        if (print_names) {
                print_field_name_equal(pretty, rem_(field_name));
@@ -964,7 +982,7 @@ enum bt_component_status print_struct(struct pretty_component *pretty,
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       fprintf(pretty->out, "{");
+       g_string_append(pretty->string, "{");
        pretty->depth++;
        nr_printed_fields = 0;
        for (i = 0; i < nr_fields; i++) {
@@ -976,7 +994,7 @@ enum bt_component_status print_struct(struct pretty_component *pretty,
                }
        }
        pretty->depth--;
-       fprintf(pretty->out, " }");
+       g_string_append(pretty->string, " }");
 end:
        bt_put(struct_type);
        return ret;
@@ -992,12 +1010,12 @@ enum bt_component_status print_array_field(struct pretty_component *pretty,
 
        if (!is_string) {
                if (i != 0) {
-                       fprintf(pretty->out, ", ");
+                       g_string_append(pretty->string, ", ");
                } else {
-                       fprintf(pretty->out, " ");
+                       g_string_append(pretty->string, " ");
                }
                if (print_names) {
-                       fprintf(pretty->out, "[%" PRIu64 "] = ", i);
+                       g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i);
                }
        }
        field = bt_ctf_field_array_get_field(array, i);
@@ -1062,9 +1080,9 @@ enum bt_component_status print_array(struct pretty_component *pretty,
        }
 
        if (is_string) {
-               g_string_assign(pretty->string, "");
+               g_string_assign(pretty->tmp_string, "");
        } else {
-               fprintf(pretty->out, "[");
+               g_string_append(pretty->string, "[");
        }
 
        pretty->depth++;
@@ -1078,14 +1096,14 @@ enum bt_component_status print_array(struct pretty_component *pretty,
 
        if (is_string) {
                if (pretty->use_colors) {
-                       fputs(COLOR_STRING_VALUE, pretty->out);
+                       g_string_append(pretty->string, COLOR_STRING_VALUE);
                }
-               print_escape_string(pretty, pretty->string->str);
+               print_escape_string(pretty, pretty->tmp_string->str);
                if (pretty->use_colors) {
-                       fputs(COLOR_RST, pretty->out);
+                       g_string_append(pretty->string, COLOR_RST);
                }
        } else {
-               fprintf(pretty->out, " ]");
+               g_string_append(pretty->string, " ]");
        }
 end:
        bt_put(field_type);
@@ -1103,12 +1121,12 @@ enum bt_component_status print_sequence_field(struct pretty_component *pretty,
 
        if (!is_string) {
                if (i != 0) {
-                       fprintf(pretty->out, ", ");
+                       g_string_append(pretty->string, ", ");
                } else {
-                       fprintf(pretty->out, " ");
+                       g_string_append(pretty->string, " ");
                }
                if (print_names) {
-                       fprintf(pretty->out, "[%" PRIu64 "] = ", i);
+                       g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i);
                }
        }
        field = bt_ctf_field_sequence_get_field(seq, i);
@@ -1180,9 +1198,9 @@ enum bt_component_status print_sequence(struct pretty_component *pretty,
        }
 
        if (is_string) {
-               g_string_assign(pretty->string, "");
+               g_string_assign(pretty->tmp_string, "");
        } else {
-               fprintf(pretty->out, "[");
+               g_string_append(pretty->string, "[");
        }
 
        pretty->depth++;
@@ -1197,14 +1215,14 @@ enum bt_component_status print_sequence(struct pretty_component *pretty,
 
        if (is_string) {
                if (pretty->use_colors) {
-                       fputs(COLOR_STRING_VALUE, pretty->out);
+                       g_string_append(pretty->string, COLOR_STRING_VALUE);
                }
-               print_escape_string(pretty, pretty->string->str);
+               print_escape_string(pretty, pretty->tmp_string->str);
                if (pretty->use_colors) {
-                       fputs(COLOR_RST, pretty->out);
+                       g_string_append(pretty->string, COLOR_RST);
                }
        } else {
-               fprintf(pretty->out, " ]");
+               g_string_append(pretty->string, " ]");
        }
 end:
        bt_put(length_field);
@@ -1225,7 +1243,7 @@ enum bt_component_status print_variant(struct pretty_component *pretty,
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       fprintf(pretty->out, "{ ");
+       g_string_append(pretty->string, "{ ");
        pretty->depth++;
        if (print_names) {
                int iter_ret;
@@ -1264,7 +1282,7 @@ enum bt_component_status print_variant(struct pretty_component *pretty,
                goto end;
        }
        pretty->depth--;
-       fprintf(pretty->out, " }");
+       g_string_append(pretty->string, " }");
 end:
        bt_put(field);
        return ret;
@@ -1289,11 +1307,11 @@ enum bt_component_status print_field(struct pretty_component *pretty,
                        return BT_COMPONENT_STATUS_ERROR;
                }
                if (pretty->use_colors) {
-                       fputs(COLOR_NUMBER_VALUE, pretty->out);
+                       g_string_append(pretty->string, COLOR_NUMBER_VALUE);
                }
-               fprintf(pretty->out, "%g", v);
+               g_string_append_printf(pretty->string, "%g", v);
                if (pretty->use_colors) {
-                       fputs(COLOR_RST, pretty->out);
+                       g_string_append(pretty->string, COLOR_RST);
                }
                return BT_COMPONENT_STATUS_OK;
        }
@@ -1301,11 +1319,11 @@ enum bt_component_status print_field(struct pretty_component *pretty,
                return print_enum(pretty, field);
        case CTF_TYPE_STRING:
                if (pretty->use_colors) {
-                       fputs(COLOR_STRING_VALUE, pretty->out);
+                       g_string_append(pretty->string, COLOR_STRING_VALUE);
                }
                print_escape_string(pretty, bt_ctf_field_string_get_value(field));
                if (pretty->use_colors) {
-                       fputs(COLOR_RST, pretty->out);
+                       g_string_append(pretty->string, COLOR_RST);
                }
                return BT_COMPONENT_STATUS_OK;
        case CTF_TYPE_STRUCT:
@@ -1318,6 +1336,7 @@ enum bt_component_status print_field(struct pretty_component *pretty,
        case CTF_TYPE_SEQUENCE:
                return print_sequence(pretty, field, print_names);
        default:
+               // TODO: log instead
                fprintf(pretty->err, "[error] Unknown type id: %d\n", (int) type_id);
                return BT_COMPONENT_STATUS_ERROR;
        }
@@ -1341,7 +1360,7 @@ enum bt_component_status print_stream_packet_context(struct pretty_component *pr
                goto end;
        }
        if (!pretty->start_line) {
-               fputs(", ", pretty->out);
+               g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1369,7 +1388,7 @@ enum bt_component_status print_event_header_raw(struct pretty_component *pretty,
                goto end;
        }
        if (!pretty->start_line) {
-               fputs(", ", pretty->out);
+               g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1394,7 +1413,7 @@ enum bt_component_status print_stream_event_context(struct pretty_component *pre
                goto end;
        }
        if (!pretty->start_line) {
-               fputs(", ", pretty->out);
+               g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1419,7 +1438,7 @@ enum bt_component_status print_event_context(struct pretty_component *pretty,
                goto end;
        }
        if (!pretty->start_line) {
-               fputs(", ", pretty->out);
+               g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1444,7 +1463,7 @@ enum bt_component_status print_event_payload(struct pretty_component *pretty,
                goto end;
        }
        if (!pretty->start_line) {
-               fputs(", ", pretty->out);
+               g_string_append(pretty->string, ", ");
        }
        pretty->start_line = false;
        if (pretty->options.print_scope_field_names) {
@@ -1470,6 +1489,7 @@ enum bt_component_status pretty_print_event(struct pretty_component *pretty,
        assert(event);
        assert(cc_prio_map);
        pretty->start_line = true;
+       g_string_assign(pretty->string, "");
        ret = print_event_header(pretty, event, cc_prio_map);
        if (ret != BT_COMPONENT_STATUS_OK) {
                goto end;
@@ -1502,7 +1522,12 @@ enum bt_component_status pretty_print_event(struct pretty_component *pretty,
                goto end;
        }
 
-       fputc('\n', pretty->out);
+       g_string_append_c(pretty->string, '\n');
+       if (fwrite(pretty->string->str, pretty->string->len, 1, pretty->out) != 1) {
+               ret = BT_COMPONENT_STATUS_ERROR;
+               goto end;
+       }
+
 end:
        bt_put(event);
        bt_put(cc_prio_map);
This page took 0.038037 seconds and 4 git commands to generate.