Trace class API: use status
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Sat, 8 Dec 2018 20:23:48 +0000 (15:23 -0500)
committerFrancis Deslauriers <francis.deslauriers@efficios.com>
Thu, 2 May 2019 20:50:15 +0000 (20:50 +0000)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
include/babeltrace/trace-ir/trace-class-const.h
include/babeltrace/trace-ir/trace-class.h
lib/trace-ir/trace-class.c

index dc451c0480c88baaeaba26206130f5ce1fdc2dce..0cc1ebb38869d9c2feb9b7e21c79c09fdcd49284 100644 (file)
 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);
 
index ffa3fc0e24d264f9c400b858be2fc1187d117662..a22ff1aa7b1a7e0493c4a7ea23d6aaf51340c7a5 100644 (file)
@@ -30,6 +30,9 @@
 /* For bt_bool, bt_uuid, bt_trace_class, bt_stream_class, bt_field_class */
 #include <babeltrace/types.h>
 
+/* For enum bt_trace_class_status */
+#include <babeltrace/trace-ir/trace-class-const.h>
+
 #include <stdint.h>
 
 #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);
 
index 265aa73a137027107482413d7213bc888411edbb..b072bad8d160256cfd26981b8b320a350940036c 100644 (file)
@@ -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;
        }
 
This page took 0.02785 seconds and 4 git commands to generate.