From a1ed915cc42b42b7eb6a7a305e6be816d36484a1 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Sat, 8 Dec 2018 15:23:48 -0500 Subject: [PATCH] Trace class API: use status Signed-off-by: Philippe Proulx --- .../babeltrace/trace-ir/trace-class-const.h | 5 ++++ include/babeltrace/trace-ir/trace-class.h | 13 +++++---- lib/trace-ir/trace-class.c | 28 ++++++++++++------- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/include/babeltrace/trace-ir/trace-class-const.h b/include/babeltrace/trace-ir/trace-class-const.h index dc451c04..0cc1ebb3 100644 --- a/include/babeltrace/trace-ir/trace-class-const.h +++ b/include/babeltrace/trace-ir/trace-class-const.h @@ -39,6 +39,11 @@ extern "C" { #endif +enum bt_trace_class_status { + BT_TRACE_CLASS_STATUS_OK = 0, + BT_TRACE_CLASS_STATUS_NOMEM = -12, +}; + extern bt_bool bt_trace_class_assigns_automatic_stream_class_id( const bt_trace_class *trace_class); diff --git a/include/babeltrace/trace-ir/trace-class.h b/include/babeltrace/trace-ir/trace-class.h index ffa3fc0e..a22ff1aa 100644 --- a/include/babeltrace/trace-ir/trace-class.h +++ b/include/babeltrace/trace-ir/trace-class.h @@ -30,6 +30,9 @@ /* For bt_bool, bt_uuid, bt_trace_class, bt_stream_class, bt_field_class */ #include +/* For enum bt_trace_class_status */ +#include + #include #ifdef __cplusplus @@ -41,21 +44,21 @@ extern bt_trace_class *bt_trace_class_create(void); extern void bt_trace_class_set_assigns_automatic_stream_class_id( bt_trace_class *trace_class, bt_bool value); -extern int bt_trace_class_set_name(bt_trace_class *trace_class, - const char *name); +extern enum bt_trace_class_status bt_trace_class_set_name( + bt_trace_class *trace_class, const char *name); extern void bt_trace_class_set_uuid(bt_trace_class *trace_class, bt_uuid uuid); -extern int bt_trace_class_set_environment_entry_integer( +extern enum bt_trace_class_status bt_trace_class_set_environment_entry_integer( bt_trace_class *trace_class, const char *name, int64_t value); -extern int bt_trace_class_set_environment_entry_string( +extern enum bt_trace_class_status bt_trace_class_set_environment_entry_string( bt_trace_class *trace_class, const char *name, const char *value); -extern int bt_trace_class_set_packet_header_field_class( +extern enum bt_trace_class_status bt_trace_class_set_packet_header_field_class( bt_trace_class *trace_class, bt_field_class *packet_header_field_class); diff --git a/lib/trace-ir/trace-class.c b/lib/trace-ir/trace-class.c index 265aa73a..b072bad8 100644 --- a/lib/trace-ir/trace-class.c +++ b/lib/trace-ir/trace-class.c @@ -156,7 +156,8 @@ const char *bt_trace_class_get_name(const struct bt_trace_class *tc) return tc->name.value; } -int bt_trace_class_set_name(struct bt_trace_class *tc, const char *name) +enum bt_trace_class_status bt_trace_class_set_name( + struct bt_trace_class *tc, const char *name) { BT_ASSERT_PRE_NON_NULL(tc, "Trace class"); BT_ASSERT_PRE_NON_NULL(name, "Name"); @@ -164,7 +165,7 @@ int bt_trace_class_set_name(struct bt_trace_class *tc, const char *name) g_string_assign(tc->name.str, name); tc->name.value = tc->name.str->str; BT_LIB_LOGV("Set trace class's name: %!+T", tc); - return 0; + return BT_TRACE_CLASS_STATUS_OK; } bt_uuid bt_trace_class_get_uuid(const struct bt_trace_class *tc) @@ -194,8 +195,8 @@ bool trace_has_environment_entry(const struct bt_trace_class *tc, const char *na } static -int set_environment_entry(struct bt_trace_class *tc, const char *name, - struct bt_value *value) +enum bt_trace_class_status set_environment_entry(struct bt_trace_class *tc, + const char *name, struct bt_value *value) { int ret; @@ -208,11 +209,12 @@ int set_environment_entry(struct bt_trace_class *tc, const char *name, "%![tc-]+T, entry-name=\"%s\"", tc, name); ret = bt_attributes_set_field_value(tc->environment, name, value); - bt_value_freeze(value); if (ret) { + ret = BT_TRACE_CLASS_STATUS_NOMEM; BT_LIB_LOGE("Cannot set trace class's environment entry: " "%![tc-]+T, entry-name=\"%s\"", tc, name); } else { + bt_value_freeze(value); BT_LIB_LOGV("Set trace class's environment entry: " "%![tc-]+T, entry-name=\"%s\"", tc, name); } @@ -220,7 +222,7 @@ int set_environment_entry(struct bt_trace_class *tc, const char *name, return ret; } -int bt_trace_class_set_environment_entry_string( +enum bt_trace_class_status bt_trace_class_set_environment_entry_string( struct bt_trace_class *tc, const char *name, const char *value) { int ret; @@ -243,8 +245,8 @@ end: return ret; } -int bt_trace_class_set_environment_entry_integer(struct bt_trace_class *tc, - const char *name, int64_t value) +enum bt_trace_class_status bt_trace_class_set_environment_entry_integer( + struct bt_trace_class *tc, const char *name, int64_t value) { int ret; struct bt_value *value_obj; @@ -253,7 +255,7 @@ int bt_trace_class_set_environment_entry_integer(struct bt_trace_class *tc, value_obj = bt_value_integer_create_init(value); if (!value_obj) { BT_LOGE_STR("Cannot create an integer value object."); - ret = -1; + ret = BT_TRACE_CLASS_STATUS_NOMEM; goto end; } @@ -357,7 +359,7 @@ const struct bt_field_class *bt_trace_class_borrow_packet_header_field_class_con return tc->packet_header_fc; } -int bt_trace_class_set_packet_header_field_class( +enum bt_trace_class_status bt_trace_class_set_packet_header_field_class( struct bt_trace_class *tc, struct bt_field_class *field_class) { @@ -380,6 +382,12 @@ int bt_trace_class_set_packet_header_field_class( field_class); ret = bt_resolve_field_paths(field_class, &resolve_ctx); if (ret) { + /* + * This is the only reason for which + * bt_resolve_field_paths() can fail: anything else + * would be because a precondition is not satisfied. + */ + ret = BT_TRACE_CLASS_STATUS_NOMEM; goto end; } -- 2.34.1