Make API CTF-agnostic
[babeltrace.git] / plugins / text / pretty / print.c
index 821f03470861693f1078e96d9dc7168cfdf89d2c..a4ace53420145cfe112b253178a32e53e0c7fac5 100644 (file)
@@ -82,27 +82,19 @@ void print_field_name_equal(struct pretty_component *pretty, const char *name)
 
 static
 void print_timestamp_cycles(struct pretty_component *pretty,
-               struct bt_clock_class *clock_class,
                struct bt_event *event)
 {
-       int ret;
        struct bt_clock_value *clock_value;
        uint64_t cycles;
+       enum bt_clock_value_status cv_status;
 
-       clock_value = bt_event_get_clock_value(event, clock_class);
-       if (!clock_value) {
+       cv_status = bt_event_borrow_default_clock_value(event, &clock_value);
+       if (cv_status != BT_CLOCK_VALUE_STATUS_KNOWN || !clock_value) {
                g_string_append(pretty->string, "????????????????????");
                return;
        }
 
-       ret = bt_clock_value_get_value(clock_value, &cycles);
-       bt_put(clock_value);
-       if (ret) {
-               // TODO: log, this is unexpected
-               g_string_append(pretty->string, "Error");
-               return;
-       }
-
+       cycles = bt_clock_value_get_value(clock_value);
        g_string_append_printf(pretty->string, "%020" PRIu64, cycles);
 
        if (pretty->last_cycles_timestamp != -1ULL) {
@@ -126,7 +118,7 @@ void print_timestamp_wall(struct pretty_component *pretty,
                return;
        }
 
-       ret = bt_clock_value_get_value_ns_from_epoch(clock_value, &ts_nsec);
+       ret = bt_clock_value_get_ns_from_origin(clock_value, &ts_nsec);
        if (ret) {
                // TODO: log, this is unexpected
                g_string_append(pretty->string, "Error");
@@ -228,44 +220,36 @@ end:
 
 static
 enum bt_component_status print_event_timestamp(struct pretty_component *pretty,
-               struct bt_event *event,
-               struct bt_clock_class_priority_map *cc_prio_map,
-               bool *start_line)
+               struct bt_event *event, bool *start_line)
 {
        bool print_names = pretty->options.print_header_field_names;
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_stream *stream = NULL;
        struct bt_stream_class *stream_class = NULL;
        struct bt_trace *trace = NULL;
-       struct bt_clock_class *clock_class = NULL;
+       struct bt_clock_value *clock_value = NULL;
+       enum bt_clock_value_status cv_status;
 
-       stream = bt_event_get_stream(event);
+       stream = bt_event_borrow_stream(event);
        if (!stream) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
 
-       stream_class = bt_stream_get_class(stream);
+       stream_class = bt_stream_borrow_class(stream);
        if (!stream_class) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       trace = bt_stream_class_get_trace(stream_class);
+       trace = bt_stream_class_borrow_trace(stream_class);
        if (!trace) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
 
-       if (bt_clock_class_priority_map_get_clock_class_count(cc_prio_map) == 0) {
-               /* No clock class: skip the timestamp without an error */
-               goto end;
-       }
-
-       clock_class =
-               bt_clock_class_priority_map_get_highest_priority_clock_class(
-                       cc_prio_map);
-       if (!clock_class) {
-               ret = BT_COMPONENT_STATUS_ERROR;
+       cv_status = bt_event_borrow_default_clock_value(event, &clock_value);
+       if (cv_status != BT_CLOCK_VALUE_STATUS_KNOWN || !clock_value) {
+               /* No default clock value: skip the timestamp without an error */
                goto end;
        }
 
@@ -278,13 +262,12 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty,
                g_string_append(pretty->string, COLOR_TIMESTAMP);
        }
        if (pretty->options.print_timestamp_cycles) {
-               print_timestamp_cycles(pretty, clock_class, event);
+               print_timestamp_cycles(pretty, event);
        } else {
-               struct bt_clock_value *clock_value =
-                       bt_event_get_clock_value(event, clock_class);
-
+               clock_value = NULL;
+               cv_status = bt_event_borrow_default_clock_value(event,
+                       &clock_value);
                print_timestamp_wall(pretty, clock_value);
-               bt_put(clock_value);
        }
        if (pretty->use_colors) {
                g_string_append(pretty->string, COLOR_RST);
@@ -329,17 +312,12 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty,
        *start_line = !print_names;
 
 end:
-       bt_put(stream);
-       bt_put(clock_class);
-       bt_put(stream_class);
-       bt_put(trace);
        return ret;
 }
 
 static
 enum bt_component_status print_event_header(struct pretty_component *pretty,
-               struct bt_event *event,
-               struct bt_clock_class_priority_map *cc_prio_map)
+               struct bt_event *event)
 {
        bool print_names = pretty->options.print_header_field_names;
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
@@ -347,24 +325,24 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
        struct bt_stream_class *stream_class = NULL;
        struct bt_trace *trace_class = NULL;
        int dom_print = 0;
+       enum bt_property_availability prop_avail;
 
-       event_class = bt_event_get_class(event);
+       event_class = bt_event_borrow_class(event);
        if (!event_class) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       stream_class = bt_event_class_get_stream_class(event_class);
+       stream_class = bt_event_class_borrow_stream_class(event_class);
        if (!stream_class) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       trace_class = bt_stream_class_get_trace(stream_class);
+       trace_class = bt_stream_class_borrow_trace(stream_class);
        if (!trace_class) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       ret = print_event_timestamp(pretty, event, cc_prio_map,
-               &pretty->start_line);
+       ret = print_event_timestamp(pretty, event, &pretty->start_line);
        if (ret != BT_COMPONENT_STATUS_OK) {
                goto end;
        }
@@ -390,8 +368,8 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
        if (pretty->options.print_trace_hostname_field) {
                struct bt_value *hostname_str;
 
-               hostname_str = bt_trace_get_environment_field_value_by_name(trace_class,
-                               "hostname");
+               hostname_str = bt_trace_borrow_environment_entry_value_by_name(
+                       trace_class, "hostname");
                if (hostname_str) {
                        const char *str;
 
@@ -405,15 +383,14 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                                        == BT_VALUE_STATUS_OK) {
                                g_string_append(pretty->string, str);
                        }
-                       bt_put(hostname_str);
                        dom_print = 1;
                }
        }
        if (pretty->options.print_trace_domain_field) {
                struct bt_value *domain_str;
 
-               domain_str = bt_trace_get_environment_field_value_by_name(trace_class,
-                               "domain");
+               domain_str = bt_trace_borrow_environment_entry_value_by_name(
+                       trace_class, "domain");
                if (domain_str) {
                        const char *str;
 
@@ -429,15 +406,14 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                                        == BT_VALUE_STATUS_OK) {
                                g_string_append(pretty->string, str);
                        }
-                       bt_put(domain_str);
                        dom_print = 1;
                }
        }
        if (pretty->options.print_trace_procname_field) {
                struct bt_value *procname_str;
 
-               procname_str = bt_trace_get_environment_field_value_by_name(trace_class,
-                               "procname");
+               procname_str = bt_trace_borrow_environment_entry_value_by_name(
+                       trace_class, "procname");
                if (procname_str) {
                        const char *str;
 
@@ -453,15 +429,15 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                                        == BT_VALUE_STATUS_OK) {
                                g_string_append(pretty->string, str);
                        }
-                       bt_put(procname_str);
+
                        dom_print = 1;
                }
        }
        if (pretty->options.print_trace_vpid_field) {
                struct bt_value *vpid_value;
 
-               vpid_value = bt_trace_get_environment_field_value_by_name(trace_class,
-                               "vpid");
+               vpid_value = bt_trace_borrow_environment_entry_value_by_name(
+                       trace_class, "vpid");
                if (vpid_value) {
                        int64_t value;
 
@@ -477,7 +453,7 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                                        == BT_VALUE_STATUS_OK) {
                                g_string_append_printf(pretty->string, "(%" PRId64 ")", value);
                        }
-                       bt_put(vpid_value);
+
                        dom_print = 1;
                }
        }
@@ -502,13 +478,12 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                enum bt_event_class_log_level log_level;
                const char *log_level_str = NULL;
 
-               log_level = bt_event_class_get_log_level(event_class);
-               BT_ASSERT(log_level != BT_EVENT_CLASS_LOG_LEVEL_UNKNOWN);
-               if (log_level != BT_EVENT_CLASS_LOG_LEVEL_UNSPECIFIED) {
+               prop_avail = bt_event_class_get_log_level(event_class,
+                       &log_level);
+               if (prop_avail == BT_PROPERTY_AVAILABILITY_AVAILABLE) {
                        log_level_str = log_level_names[log_level];
-               }
+                       BT_ASSERT(log_level_str);
 
-               if (log_level_str) {
                        if (!pretty->start_line) {
                                g_string_append(pretty->string, ", ");
                        }
@@ -564,10 +539,8 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
        } else {
                g_string_append(pretty->string, ", ");
        }
+
 end:
-       bt_put(trace_class);
-       bt_put(stream_class);
-       bt_put(event_class);
        return ret;
 }
 
@@ -576,50 +549,23 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
                struct bt_field *field)
 {
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
-       struct bt_field_type *field_type = NULL;
-       enum bt_integer_base base;
-       enum bt_string_encoding encoding;
-       int signedness;
+       enum bt_field_type_integer_preferred_display_base base;
+       struct bt_field_type *int_ft;
        union {
                uint64_t u;
                int64_t s;
        } v;
        bool rst_color = false;
-
-       field_type = bt_field_get_type(field);
-       if (!field_type) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
-       signedness = bt_ctf_field_type_integer_get_signed(field_type);
-       if (signedness < 0) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
-       if (!signedness) {
-               if (bt_field_unsigned_integer_get_value(field, &v.u) < 0) {
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
+       enum bt_field_type_id ft_id;
+
+       int_ft = bt_field_borrow_type(field);
+       BT_ASSERT(int_ft);
+       ft_id = bt_field_get_type_id(field);
+       if (ft_id == BT_FIELD_TYPE_ID_UNSIGNED_INTEGER ||
+                       ft_id == BT_FIELD_TYPE_ID_UNSIGNED_ENUMERATION) {
+               v.u = bt_field_unsigned_integer_get_value(field);
        } else {
-               if (bt_field_signed_integer_get_value(field, &v.s) < 0) {
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
-       }
-
-       encoding = bt_field_type_integer_get_encoding(field_type);
-       switch (encoding) {
-       case BT_STRING_ENCODING_UTF8:
-       case BT_STRING_ENCODING_ASCII:
-               g_string_append_c(pretty->tmp_string, (int) v.u);
-               goto end;
-       case BT_STRING_ENCODING_NONE:
-       case BT_STRING_ENCODING_UNKNOWN:
-               break;
-       default:
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
+               v.s = bt_field_signed_integer_get_value(field);
        }
 
        if (pretty->use_colors) {
@@ -627,17 +573,13 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
                rst_color = true;
        }
 
-       base = bt_field_type_integer_get_base(field_type);
+       base = bt_field_type_integer_get_preferred_display_base(int_ft);
        switch (base) {
-       case BT_INTEGER_BASE_BINARY:
+       case BT_FIELD_TYPE_INTEGER_PREFERRED_DISPLAY_BASE_BINARY:
        {
                int bitnr, len;
 
-               len = bt_field_type_integer_get_size(field_type);
-               if (len < 0) {
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
+               len = bt_field_type_integer_get_field_value_range(int_ft);
                g_string_append(pretty->string, "0b");
                v.u = _bt_piecewise_lshift(v.u, 64 - len);
                for (bitnr = 0; bitnr < len; bitnr++) {
@@ -646,16 +588,14 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
                }
                break;
        }
-       case BT_INTEGER_BASE_OCTAL:
+       case BT_FIELD_TYPE_INTEGER_PREFERRED_DISPLAY_BASE_OCTAL:
        {
-               if (signedness) {
+               if (ft_id == BT_FIELD_TYPE_ID_SIGNED_INTEGER ||
+                               ft_id == BT_FIELD_TYPE_ID_SIGNED_ENUMERATION) {
                        int len;
 
-                       len = bt_field_type_integer_get_size(field_type);
-                       if (len < 0) {
-                               ret = BT_COMPONENT_STATUS_ERROR;
-                               goto end;
-                       }
+                       len = bt_field_type_integer_get_field_value_range(
+                               int_ft);
                        if (len < 64) {
                                size_t rounded_len;
 
@@ -669,23 +609,19 @@ enum bt_component_status print_integer(struct pretty_component *pretty,
                g_string_append_printf(pretty->string, "0%" PRIo64, v.u);
                break;
        }
-       case BT_INTEGER_BASE_DECIMAL:
-       case BT_INTEGER_BASE_UNSPECIFIED:
-               if (!signedness) {
+       case BT_FIELD_TYPE_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL:
+               if (ft_id == BT_FIELD_TYPE_ID_UNSIGNED_INTEGER ||
+                               ft_id == BT_FIELD_TYPE_ID_UNSIGNED_ENUMERATION) {
                        g_string_append_printf(pretty->string, "%" PRIu64, v.u);
                } else {
                        g_string_append_printf(pretty->string, "%" PRId64, v.s);
                }
                break;
-       case BT_INTEGER_BASE_HEXADECIMAL:
+       case BT_FIELD_TYPE_INTEGER_PREFERRED_DISPLAY_BASE_HEXADECIMAL:
        {
                int len;
 
-               len = bt_field_type_integer_get_size(field_type);
-               if (len < 0) {
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
+               len = bt_field_type_integer_get_field_value_range(int_ft);
                if (len < 64) {
                        /* Round length to the nearest nibble */
                        uint8_t rounded_len = ((len + 3) & ~0x3);
@@ -704,7 +640,6 @@ end:
        if (rst_color) {
                g_string_append(pretty->string, COLOR_RST);
        }
-       bt_put(field_type);
        return ret;
 }
 
@@ -781,57 +716,37 @@ enum bt_component_status print_enum(struct pretty_component *pretty,
                struct bt_field *field)
 {
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
-       struct bt_field *container_field = NULL;
        struct bt_field_type *enumeration_field_type = NULL;
-       struct bt_field_type *container_field_type = NULL;
-       struct bt_field_type_enumeration_mapping_iterator *iter = NULL;
-       int nr_mappings = 0;
-       int is_signed;
+       bt_field_type_enumeration_mapping_label_array label_array;
+       uint64_t label_count;
+       uint64_t i;
 
-       enumeration_field_type = bt_field_get_type(field);
+       enumeration_field_type = bt_field_borrow_type(field);
        if (!enumeration_field_type) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       container_field = bt_field_enumeration_get_container(field);
-       if (!container_field) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
-       container_field_type = bt_field_get_type(container_field);
-       if (!container_field_type) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
+
+       switch (bt_field_get_type_id(field)) {
+       case BT_FIELD_TYPE_ID_UNSIGNED_ENUMERATION:
+               ret = bt_field_unsigned_enumeration_get_mapping_labels(field,
+                       &label_array, &label_count);
+               break;
+       case BT_FIELD_TYPE_ID_SIGNED_ENUMERATION:
+               ret = bt_field_signed_enumeration_get_mapping_labels(field,
+                       &label_array, &label_count);
+               break;
+       default:
+               abort();
        }
-       is_signed = bt_ctf_field_type_integer_get_signed(container_field_type);
-       if (is_signed < 0) {
+
+       if (ret) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       if (is_signed) {
-               int64_t value;
 
-               if (bt_field_signed_integer_get_value(container_field,
-                               &value)) {
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
-               iter = bt_field_type_enumeration_find_mappings_by_signed_value(
-                               enumeration_field_type, value);
-       } else {
-               uint64_t value;
-
-               if (bt_field_unsigned_integer_get_value(container_field,
-                               &value)) {
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
-               iter = bt_field_type_enumeration_find_mappings_by_unsigned_value(
-                               enumeration_field_type, value);
-       }
        g_string_append(pretty->string, "( ");
-       ret = bt_field_type_enumeration_mapping_iterator_next(iter);
-       if (ret) {
+       if (label_count == 0) {
                if (pretty->use_colors) {
                        g_string_append(pretty->string, COLOR_UNKNOWN);
                }
@@ -841,16 +756,12 @@ enum bt_component_status print_enum(struct pretty_component *pretty,
                }
                goto skip_loop;
        }
-       for (;;) {
-               const char *mapping_name;
+       for (i = 0; i < label_count; i++) {
+               const char *mapping_name = label_array[i];
 
-               if (bt_field_type_enumeration_mapping_iterator_get_signed(
-                               iter, &mapping_name, NULL, NULL) < 0) {
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
-               if (nr_mappings++)
+               if (i == 0) {
                        g_string_append(pretty->string, ", ");
+               }
                if (pretty->use_colors) {
                        g_string_append(pretty->string, COLOR_ENUM_MAPPING_NAME);
                }
@@ -858,22 +769,15 @@ enum bt_component_status print_enum(struct pretty_component *pretty,
                if (pretty->use_colors) {
                        g_string_append(pretty->string, COLOR_RST);
                }
-               if (bt_field_type_enumeration_mapping_iterator_next(iter) < 0) {
-                       break;
-               }
        }
 skip_loop:
        g_string_append(pretty->string, " : container = ");
-       ret = print_integer(pretty, container_field);
+       ret = print_integer(pretty, field);
        if (ret != BT_COMPONENT_STATUS_OK) {
                goto end;
        }
        g_string_append(pretty->string, " )");
 end:
-       bt_put(iter);
-       bt_put(container_field_type);
-       bt_put(container_field);
-       bt_put(enumeration_field_type);
        return ret;
 }
 
@@ -900,7 +804,7 @@ static
 enum bt_component_status print_struct_field(struct pretty_component *pretty,
                struct bt_field *_struct,
                struct bt_field_type *struct_type,
-               int i, bool print_names, int *nr_printed_fields,
+               uint64_t i, bool print_names, uint64_t *nr_printed_fields,
                GQuark *filter_fields, int filter_array_len)
 {
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
@@ -908,16 +812,14 @@ enum bt_component_status print_struct_field(struct pretty_component *pretty,
        struct bt_field *field = NULL;
        struct bt_field_type *field_type = NULL;;
 
-       field = bt_field_structure_get_field_by_index(_struct, i);
+       field = bt_field_structure_borrow_member_field_by_index(_struct, i);
        if (!field) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       if (bt_field_type_structure_get_field_by_index(struct_type,
-                       &field_name, &field_type, i) < 0) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
+
+       bt_field_type_structure_borrow_member_by_index(struct_type, i,
+               &field_name, &field_type);
 
        if (filter_fields && !filter_field_name(pretty, field_name,
                                filter_fields, filter_array_len)) {
@@ -935,9 +837,8 @@ enum bt_component_status print_struct_field(struct pretty_component *pretty,
        }
        ret = print_field(pretty, field, print_names, NULL, 0);
        *nr_printed_fields += 1;
+
 end:
-       bt_put(field_type);
-       bt_put(field);
        return ret;
 }
 
@@ -948,14 +849,14 @@ enum bt_component_status print_struct(struct pretty_component *pretty,
 {
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_field_type *struct_type = NULL;
-       int nr_fields, i, nr_printed_fields;
+       uint64_t nr_fields, i, nr_printed_fields;
 
-       struct_type = bt_field_get_type(_struct);
+       struct_type = bt_field_borrow_type(_struct);
        if (!struct_type) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       nr_fields = bt_field_type_structure_get_field_count(struct_type);
+       nr_fields = bt_field_type_structure_get_member_count(struct_type);
        if (nr_fields < 0) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
@@ -973,38 +874,29 @@ enum bt_component_status print_struct(struct pretty_component *pretty,
        }
        pretty->depth--;
        g_string_append(pretty->string, " }");
+
 end:
-       bt_put(struct_type);
        return ret;
 }
 
 static
 enum bt_component_status print_array_field(struct pretty_component *pretty,
-               struct bt_field *array, uint64_t i,
-               bool is_string, bool print_names)
+               struct bt_field *array, uint64_t i, bool print_names)
 {
-       enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_field *field = NULL;
 
-       if (!is_string) {
-               if (i != 0) {
-                       g_string_append(pretty->string, ", ");
-               } else {
-                       g_string_append(pretty->string, " ");
-               }
-               if (print_names) {
-                       g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i);
-               }
+       if (i != 0) {
+               g_string_append(pretty->string, ", ");
+       } else {
+               g_string_append(pretty->string, " ");
        }
-       field = bt_field_array_get_field(array, i);
-       if (!field) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
+       if (print_names) {
+               g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i);
        }
-       ret = print_field(pretty, field, print_names, NULL, 0);
-end:
-       bt_put(field);
-       return ret;
+
+       field = bt_field_array_borrow_element_field_by_index(array, i);
+       BT_ASSERT(field);
+       return print_field(pretty, field, print_names, NULL, 0);
 }
 
 static
@@ -1012,110 +904,49 @@ enum bt_component_status print_array(struct pretty_component *pretty,
                struct bt_field *array, bool print_names)
 {
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
-       struct bt_field_type *array_type = NULL, *field_type = NULL;
-       enum bt_field_type_id type_id;
-       int64_t len;
+       struct bt_field_type *array_type = NULL;
+       uint64_t len;
        uint64_t i;
-       bool is_string = false;
 
-       array_type = bt_field_get_type(array);
+       array_type = bt_field_borrow_type(array);
        if (!array_type) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       field_type = bt_field_type_array_get_element_type(array_type);
-       if (!field_type) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
-       len = bt_field_type_array_get_length(array_type);
-       if (len < 0) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
-       type_id = bt_field_type_get_type_id(field_type);
-       if (type_id == BT_FIELD_TYPE_ID_INTEGER) {
-               enum bt_string_encoding encoding;
-
-               encoding = bt_field_type_integer_get_encoding(field_type);
-               if (encoding == BT_STRING_ENCODING_UTF8
-                               || encoding == BT_STRING_ENCODING_ASCII) {
-                       int integer_len, integer_alignment;
-
-                       integer_len = bt_field_type_integer_get_size(field_type);
-                       if (integer_len < 0) {
-                               return BT_COMPONENT_STATUS_ERROR;
-                       }
-                       integer_alignment = bt_field_type_get_alignment(field_type);
-                       if (integer_alignment < 0) {
-                               return BT_COMPONENT_STATUS_ERROR;
-                       }
-                       if (integer_len == CHAR_BIT
-                                       && integer_alignment == CHAR_BIT) {
-                               is_string = true;
-                       }
-               }
-       }
-
-       if (is_string) {
-               g_string_assign(pretty->tmp_string, "");
-       } else {
-               g_string_append(pretty->string, "[");
-       }
-
+       len = bt_field_array_get_length(array);
+       g_string_append(pretty->string, "[");
        pretty->depth++;
        for (i = 0; i < len; i++) {
-               ret = print_array_field(pretty, array, i, is_string, print_names);
+               ret = print_array_field(pretty, array, i, print_names);
                if (ret != BT_COMPONENT_STATUS_OK) {
                        goto end;
                }
        }
        pretty->depth--;
+       g_string_append(pretty->string, " ]");
 
-       if (is_string) {
-               if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_STRING_VALUE);
-               }
-               print_escape_string(pretty, pretty->tmp_string->str);
-               if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_RST);
-               }
-       } else {
-               g_string_append(pretty->string, " ]");
-       }
 end:
-       bt_put(field_type);
-       bt_put(array_type);
        return ret;
 }
 
 static
 enum bt_component_status print_sequence_field(struct pretty_component *pretty,
-               struct bt_field *seq, uint64_t i,
-               bool is_string, bool print_names)
+               struct bt_field *seq, uint64_t i, bool print_names)
 {
-       enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_field *field = NULL;
 
-       if (!is_string) {
-               if (i != 0) {
-                       g_string_append(pretty->string, ", ");
-               } else {
-                       g_string_append(pretty->string, " ");
-               }
-               if (print_names) {
-                       g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i);
-               }
+       if (i != 0) {
+               g_string_append(pretty->string, ", ");
+       } else {
+               g_string_append(pretty->string, " ");
        }
-       field = bt_field_sequence_get_field(seq, i);
-       if (!field) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
+       if (print_names) {
+               g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i);
        }
-       ret = print_field(pretty, field, print_names, NULL, 0);
-end:
-       bt_put(field);
-       return ret;
+
+       field = bt_field_array_borrow_element_field_by_index(seq, i);
+       BT_ASSERT(field);
+       return print_field(pretty, field, print_names, NULL, 0);
 }
 
 static
@@ -1123,89 +954,28 @@ enum bt_component_status print_sequence(struct pretty_component *pretty,
                struct bt_field *seq, bool print_names)
 {
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
-       struct bt_field_type *seq_type = NULL, *field_type = NULL;
-       struct bt_field *length_field = NULL;
-       enum bt_field_type_id type_id;
        uint64_t len;
        uint64_t i;
-       bool is_string = false;
 
-       seq_type = bt_field_get_type(seq);
-       if (!seq_type) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
-       length_field = bt_field_sequence_get_length(seq);
-       if (!length_field) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
-       if (bt_field_unsigned_integer_get_value(length_field, &len) < 0) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
-       field_type = bt_field_type_sequence_get_element_type(seq_type);
-       if (!field_type) {
+       len = bt_field_array_get_length(seq);
+       if (len < 0) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       type_id = bt_field_type_get_type_id(field_type);
-       if (type_id == BT_FIELD_TYPE_ID_INTEGER) {
-               enum bt_string_encoding encoding;
-
-               encoding = bt_field_type_integer_get_encoding(field_type);
-               if (encoding == BT_STRING_ENCODING_UTF8
-                               || encoding == BT_STRING_ENCODING_ASCII) {
-                       int integer_len, integer_alignment;
-
-                       integer_len = bt_field_type_integer_get_size(field_type);
-                       if (integer_len < 0) {
-                               ret = BT_COMPONENT_STATUS_ERROR;
-                               goto end;
-                       }
-                       integer_alignment = bt_field_type_get_alignment(field_type);
-                       if (integer_alignment < 0) {
-                               ret = BT_COMPONENT_STATUS_ERROR;
-                               goto end;
-                       }
-                       if (integer_len == CHAR_BIT
-                                       && integer_alignment == CHAR_BIT) {
-                               is_string = true;
-                       }
-               }
-       }
 
-       if (is_string) {
-               g_string_assign(pretty->tmp_string, "");
-       } else {
-               g_string_append(pretty->string, "[");
-       }
+       g_string_append(pretty->string, "[");
 
        pretty->depth++;
        for (i = 0; i < len; i++) {
-               ret = print_sequence_field(pretty, seq, i,
-                       is_string, print_names);
+               ret = print_sequence_field(pretty, seq, i, print_names);
                if (ret != BT_COMPONENT_STATUS_OK) {
                        goto end;
                }
        }
        pretty->depth--;
+       g_string_append(pretty->string, " ]");
 
-       if (is_string) {
-               if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_STRING_VALUE);
-               }
-               print_escape_string(pretty, pretty->tmp_string->str);
-               if (pretty->use_colors) {
-                       g_string_append(pretty->string, COLOR_RST);
-               }
-       } else {
-               g_string_append(pretty->string, " ]");
-       }
 end:
-       bt_put(length_field);
-       bt_put(field_type);
-       bt_put(seq_type);
        return ret;
 }
 
@@ -1216,46 +986,13 @@ enum bt_component_status print_variant(struct pretty_component *pretty,
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_field *field = NULL;
 
-       field = bt_field_variant_get_current_field(variant);
-       if (!field) {
-               ret = BT_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
+       field = bt_field_variant_borrow_selected_option_field(variant);
+       BT_ASSERT(field);
        g_string_append(pretty->string, "{ ");
        pretty->depth++;
        if (print_names) {
-               int iter_ret;
-               struct bt_field *tag_field = NULL;
-               const char *tag_choice;
-               struct bt_field_type_enumeration_mapping_iterator *iter;
-
-               tag_field = bt_field_variant_get_tag(variant);
-               if (!tag_field) {
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
-
-               iter = bt_field_enumeration_get_mappings(tag_field);
-               iter_ret = bt_field_type_enumeration_mapping_iterator_next(
-                       iter);
-               if (!iter || ret) {
-                       bt_put(tag_field);
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
-
-               iter_ret =
-                       bt_field_type_enumeration_mapping_iterator_get_signed(
-                               iter, &tag_choice, NULL, NULL);
-               if (iter_ret) {
-                       bt_put(iter);
-                       bt_put(tag_field);
-                       ret = BT_COMPONENT_STATUS_ERROR;
-                       goto end;
-               }
-               print_field_name_equal(pretty, tag_choice);
-               bt_put(tag_field);
-               bt_put(iter);
+               // TODO: find tag's name using field path
+               // print_field_name_equal(pretty, tag_choice);
        }
        ret = print_field(pretty, field, print_names, NULL, 0);
        if (ret != BT_COMPONENT_STATUS_OK) {
@@ -1263,8 +1000,8 @@ enum bt_component_status print_variant(struct pretty_component *pretty,
        }
        pretty->depth--;
        g_string_append(pretty->string, " }");
+
 end:
-       bt_put(field);
        return ret;
 }
 
@@ -1277,15 +1014,14 @@ enum bt_component_status print_field(struct pretty_component *pretty,
 
        type_id = bt_field_get_type_id(field);
        switch (type_id) {
-       case CTF_TYPE_INTEGER:
+       case BT_FIELD_TYPE_ID_UNSIGNED_INTEGER:
+       case BT_FIELD_TYPE_ID_SIGNED_INTEGER:
                return print_integer(pretty, field);
-       case CTF_TYPE_FLOAT:
+       case BT_FIELD_TYPE_ID_REAL:
        {
                double v;
 
-               if (bt_field_floating_point_get_value(field, &v)) {
-                       return BT_COMPONENT_STATUS_ERROR;
-               }
+               v = bt_field_real_get_value(field);
                if (pretty->use_colors) {
                        g_string_append(pretty->string, COLOR_NUMBER_VALUE);
                }
@@ -1295,9 +1031,10 @@ enum bt_component_status print_field(struct pretty_component *pretty,
                }
                return BT_COMPONENT_STATUS_OK;
        }
-       case CTF_TYPE_ENUM:
+       case BT_FIELD_TYPE_ID_UNSIGNED_ENUMERATION:
+       case BT_FIELD_TYPE_ID_SIGNED_ENUMERATION:
                return print_enum(pretty, field);
-       case CTF_TYPE_STRING:
+       case BT_FIELD_TYPE_ID_STRING:
        {
                const char *str;
 
@@ -1315,14 +1052,14 @@ enum bt_component_status print_field(struct pretty_component *pretty,
                }
                return BT_COMPONENT_STATUS_OK;
        }
-       case CTF_TYPE_STRUCT:
+       case BT_FIELD_TYPE_ID_STRUCTURE:
                return print_struct(pretty, field, print_names, filter_fields,
                                filter_array_len);
-       case CTF_TYPE_VARIANT:
+       case BT_FIELD_TYPE_ID_VARIANT:
                return print_variant(pretty, field, print_names);
-       case CTF_TYPE_ARRAY:
+       case BT_FIELD_TYPE_ID_STATIC_ARRAY:
                return print_array(pretty, field, print_names);
-       case CTF_TYPE_SEQUENCE:
+       case BT_FIELD_TYPE_ID_DYNAMIC_ARRAY:
                return print_sequence(pretty, field, print_names);
        default:
                // TODO: log instead
@@ -1339,12 +1076,12 @@ enum bt_component_status print_stream_packet_context(struct pretty_component *pr
        struct bt_packet *packet = NULL;
        struct bt_field *main_field = NULL;
 
-       packet = bt_event_get_packet(event);
+       packet = bt_event_borrow_packet(event);
        if (!packet) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
-       main_field = bt_packet_get_context(packet);
+       main_field = bt_packet_borrow_context_field(packet);
        if (!main_field) {
                goto end;
        }
@@ -1359,9 +1096,8 @@ enum bt_component_status print_stream_packet_context(struct pretty_component *pr
                        pretty->options.print_context_field_names,
                        stream_packet_context_quarks,
                        STREAM_PACKET_CONTEXT_QUARKS_LEN);
+
 end:
-       bt_put(main_field);
-       bt_put(packet);
        return ret;
 }
 
@@ -1372,7 +1108,7 @@ enum bt_component_status print_event_header_raw(struct pretty_component *pretty,
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_field *main_field = NULL;
 
-       main_field = bt_event_get_header(event);
+       main_field = bt_event_borrow_header_field(event);
        if (!main_field) {
                goto end;
        }
@@ -1385,8 +1121,8 @@ enum bt_component_status print_event_header_raw(struct pretty_component *pretty,
        }
        ret = print_field(pretty, main_field,
                        pretty->options.print_header_field_names, NULL, 0);
+
 end:
-       bt_put(main_field);
        return ret;
 }
 
@@ -1397,7 +1133,7 @@ enum bt_component_status print_stream_event_context(struct pretty_component *pre
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_field *main_field = NULL;
 
-       main_field = bt_event_get_stream_event_context(event);
+       main_field = bt_event_borrow_common_context_field(event);
        if (!main_field) {
                goto end;
        }
@@ -1410,8 +1146,8 @@ enum bt_component_status print_stream_event_context(struct pretty_component *pre
        }
        ret = print_field(pretty, main_field,
                        pretty->options.print_context_field_names, NULL, 0);
+
 end:
-       bt_put(main_field);
        return ret;
 }
 
@@ -1422,7 +1158,7 @@ enum bt_component_status print_event_context(struct pretty_component *pretty,
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_field *main_field = NULL;
 
-       main_field = bt_event_get_event_context(event);
+       main_field = bt_event_borrow_specific_context_field(event);
        if (!main_field) {
                goto end;
        }
@@ -1435,8 +1171,8 @@ enum bt_component_status print_event_context(struct pretty_component *pretty,
        }
        ret = print_field(pretty, main_field,
                        pretty->options.print_context_field_names, NULL, 0);
+
 end:
-       bt_put(main_field);
        return ret;
 }
 
@@ -1447,7 +1183,7 @@ enum bt_component_status print_event_payload(struct pretty_component *pretty,
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_field *main_field = NULL;
 
-       main_field = bt_event_get_event_payload(event);
+       main_field = bt_event_borrow_payload_field(event);
        if (!main_field) {
                goto end;
        }
@@ -1460,13 +1196,13 @@ enum bt_component_status print_event_payload(struct pretty_component *pretty,
        }
        ret = print_field(pretty, main_field,
                        pretty->options.print_payload_field_names, NULL, 0);
+
 end:
-       bt_put(main_field);
        return ret;
 }
 
 static
-int flush_buf(struct pretty_component *pretty)
+int flush_buf(FILE *stream, struct pretty_component *pretty)
 {
        int ret = 0;
 
@@ -1474,7 +1210,7 @@ int flush_buf(struct pretty_component *pretty)
                goto end;
        }
 
-       if (fwrite(pretty->string->str, pretty->string->len, 1, pretty->out) != 1) {
+       if (fwrite(pretty->string->str, pretty->string->len, 1, stream) != 1) {
                ret = -1;
        }
 
@@ -1488,15 +1224,12 @@ enum bt_component_status pretty_print_event(struct pretty_component *pretty,
 {
        enum bt_component_status ret;
        struct bt_event *event =
-               bt_notification_event_get_event(event_notif);
-       struct bt_clock_class_priority_map *cc_prio_map =
-               bt_notification_event_get_clock_class_priority_map(event_notif);
+               bt_notification_event_borrow_event(event_notif);
 
        BT_ASSERT(event);
-       BT_ASSERT(cc_prio_map);
        pretty->start_line = true;
        g_string_assign(pretty->string, "");
-       ret = print_event_header(pretty, event, cc_prio_map);
+       ret = print_event_header(pretty, event);
        if (ret != BT_COMPONENT_STATUS_OK) {
                goto end;
        }
@@ -1529,22 +1262,21 @@ enum bt_component_status pretty_print_event(struct pretty_component *pretty,
        }
 
        g_string_append_c(pretty->string, '\n');
-       if (flush_buf(pretty)) {
+       if (flush_buf(pretty->out, pretty)) {
                ret = BT_COMPONENT_STATUS_ERROR;
                goto end;
        }
 
 end:
-       bt_put(event);
-       bt_put(cc_prio_map);
        return ret;
 }
 
-BT_HIDDEN
-enum bt_component_status pretty_print_discarded_elements(
-               struct pretty_component *pretty,
-               struct bt_notification *notif)
+static
+enum bt_component_status print_discarded_elements_msg(
+               struct pretty_component *pretty, struct bt_packet *packet,
+               uint64_t count, const char *elem_type)
 {
+#if 0
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
        struct bt_stream *stream = NULL;
        struct bt_stream_class *stream_class = NULL;
@@ -1554,39 +1286,25 @@ enum bt_component_status pretty_print_discarded_elements(
        const unsigned char *trace_uuid;
        int64_t stream_class_id;
        int64_t stream_id;
-       bool is_discarded_events;
-       int64_t count;
-       struct bt_clock_value *clock_value = NULL;
+       struct bt_clock_value *begin_clock_value = NULL;
+       struct bt_clock_value *end_clock_value = NULL;
 
        /* Stream name */
-       switch (bt_notification_get_type(notif)) {
-       case BT_NOTIFICATION_TYPE_DISCARDED_EVENTS:
-               stream = bt_notification_discarded_events_get_stream(notif);
-               count = bt_notification_discarded_events_get_count(notif);
-               is_discarded_events = true;
-               break;
-       case BT_NOTIFICATION_TYPE_DISCARDED_PACKETS:
-               stream = bt_notification_discarded_packets_get_stream(notif);
-               count = bt_notification_discarded_packets_get_count(notif);
-               is_discarded_events = false;
-               break;
-       default:
-               abort();
-       }
-
+       BT_ASSERT(packet);
+       stream = bt_packet_borrow_stream(packet);
        BT_ASSERT(stream);
        stream_name = bt_stream_get_name(stream);
 
        /* Stream class ID */
-       stream_class = bt_stream_get_class(stream);
+       stream_class = bt_stream_borrow_class(stream);
        BT_ASSERT(stream_class);
        stream_class_id = bt_stream_class_get_id(stream_class);
 
        /* Stream ID */
        stream_id = bt_stream_get_id(stream);
 
-       /* Trace path */
-       trace = bt_stream_class_get_trace(stream_class);
+       /* Trace name */
+       trace = bt_stream_class_borrow_trace(stream_class);
        BT_ASSERT(trace);
        trace_name = bt_trace_get_name(trace);
        if (!trace_name) {
@@ -1596,36 +1314,36 @@ enum bt_component_status pretty_print_discarded_elements(
        /* Trace UUID */
        trace_uuid = bt_trace_get_uuid(trace);
 
-       /*
-        * Print to standard error stream to remain backward compatible
-        * with Babeltrace 1.
-        */
-       fprintf(stderr,
-               "%s%sWARNING%s%s: Tracer discarded %" PRId64 " %s%s between [",
+       /* Beginning and end times */
+       (void) bt_packet_borrow_previous_packet_default_end_clock_value(
+               packet, &begin_clock_value);
+       (void) bt_packet_borrow_default_end_clock_value(packet,
+               &end_clock_value);
+
+       /* Format message */
+       g_string_assign(pretty->string, "");
+       g_string_append_printf(pretty->string,
+               "%s%sWARNING%s%s: Tracer discarded %" PRId64 " %s%s ",
                bt_common_color_fg_yellow(),
                bt_common_color_bold(),
                bt_common_color_reset(),
                bt_common_color_fg_yellow(),
-               count, is_discarded_events ? "event" : "packet",
-               count == 1 ? "" : "s");
-       g_string_assign(pretty->string, "");
-       clock_value = is_discarded_events ?
-               bt_notification_discarded_events_get_begin_clock_value(notif) :
-               bt_notification_discarded_packets_get_begin_clock_value(notif);
-       print_timestamp_wall(pretty, clock_value);
-       BT_PUT(clock_value);
-       fprintf(stderr, "%s] and [", pretty->string->str);
-       g_string_assign(pretty->string, "");
-       clock_value = is_discarded_events ?
-               bt_notification_discarded_events_get_end_clock_value(notif) :
-               bt_notification_discarded_packets_get_end_clock_value(notif);
-       print_timestamp_wall(pretty, clock_value);
-       BT_PUT(clock_value);
-       fprintf(stderr, "%s] in trace \"%s\" ",
-               pretty->string->str, trace_name);
+               count, elem_type, count == 1 ? "" : "s");
+
+       if (begin_clock_value && end_clock_value) {
+               g_string_append(pretty->string, "between [");
+               print_timestamp_wall(pretty, begin_clock_value);
+               g_string_append(pretty->string, "] and [");
+               print_timestamp_wall(pretty, end_clock_value);
+               g_string_append(pretty->string, "]");
+       } else {
+               g_string_append(pretty->string, "(unknown time range)");
+       }
+
+       g_string_append_printf(pretty->string, " in trace \"%s\" ", trace_name);
 
        if (trace_uuid) {
-               fprintf(stderr,
+               g_string_append_printf(pretty->string,
                        "(UUID: %02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x) ",
                        trace_uuid[0],
                        trace_uuid[1],
@@ -1644,22 +1362,68 @@ enum bt_component_status pretty_print_discarded_elements(
                        trace_uuid[14],
                        trace_uuid[15]);
        } else {
-               fprintf(stderr, "(no UUID) ");
+               g_string_append(pretty->string, "(no UUID) ");
        }
 
-       fprintf(stderr, "within stream \"%s\" (stream class ID: %" PRId64 ", ",
+       g_string_append_printf(pretty->string,
+               "within stream \"%s\" (stream class ID: %" PRId64 ", ",
                stream_name, stream_class_id);
 
        if (stream_id >= 0) {
-               fprintf(stderr, "stream ID: %" PRId64, stream_id);
+               g_string_append_printf(pretty->string,
+                       "stream ID: %" PRId64, stream_id);
        } else {
-               fprintf(stderr, "no stream ID");
+               g_string_append(pretty->string, "no stream ID");
+       }
+
+       g_string_append_printf(pretty->string, ").%s\n",
+               bt_common_color_reset());
+
+       /*
+        * Print to standard error stream to remain backward compatible
+        * with Babeltrace 1.
+        */
+       if (flush_buf(stderr, pretty)) {
+               ret = BT_COMPONENT_STATUS_ERROR;
        }
 
-       fprintf(stderr, ").%s\n", bt_common_color_reset());
-       bt_put(stream);
-       bt_put(stream_class);
-       bt_put(trace);
-       bt_put(clock_value);
        return ret;
+#endif
+       return 0;
+}
+
+BT_HIDDEN
+enum bt_component_status pretty_print_packet(struct pretty_component *pretty,
+               struct bt_notification *packet_beginning_notif)
+{
+#if 0
+       struct bt_packet *packet = bt_notification_packet_begin_borrow_packet(
+               packet_beginning_notif);
+       uint64_t count;
+       enum bt_component_status status = BT_COMPONENT_STATUS_OK;
+
+       if (bt_packet_get_discarded_event_count(packet, &count) ==
+                       BT_PACKET_PROPERTY_AVAILABILITY_AVAILABLE &&
+                       count > 0) {
+               status = print_discarded_elements_msg(pretty, packet,
+                       count, "event");
+               if (status != BT_COMPONENT_STATUS_OK) {
+                       goto end;
+               }
+       }
+
+       if (bt_packet_get_discarded_packet_count(packet, &count) ==
+                       BT_PACKET_PROPERTY_AVAILABILITY_AVAILABLE &&
+                       count > 0) {
+               status = print_discarded_elements_msg(pretty, packet,
+                       count, "packet");
+               if (status != BT_COMPONENT_STATUS_OK) {
+                       goto end;
+               }
+       }
+
+end:
+       return status;
+#endif
+       return 0;
 }
This page took 0.043282 seconds and 4 git commands to generate.