From 743eec935dd917ee260e1589761beeb78c77cd4c Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Sat, 8 Dec 2018 15:11:23 -0500 Subject: [PATCH] Field API: use status Signed-off-by: Philippe Proulx --- include/babeltrace/trace-ir/field-const.h | 9 +++- include/babeltrace/trace-ir/field.h | 19 +++++--- lib/trace-ir/field.c | 55 ++++++++++++++--------- 3 files changed, 52 insertions(+), 31 deletions(-) diff --git a/include/babeltrace/trace-ir/field-const.h b/include/babeltrace/trace-ir/field-const.h index e8784dd7..e44e8328 100644 --- a/include/babeltrace/trace-ir/field-const.h +++ b/include/babeltrace/trace-ir/field-const.h @@ -39,6 +39,11 @@ extern "C" { #endif +enum bt_field_status { + BT_FIELD_STATUS_OK = 0, + BT_FIELD_STATUS_NOMEM = -12, +}; + extern const bt_field_class *bt_field_borrow_class_const( const bt_field *field); @@ -52,12 +57,12 @@ extern uint64_t bt_field_unsigned_integer_get_value( extern double bt_field_real_get_value(const bt_field *field); -extern int bt_field_unsigned_enumeration_get_mapping_labels( +extern enum bt_field_status bt_field_unsigned_enumeration_get_mapping_labels( const bt_field *field, bt_field_class_enumeration_mapping_label_array *label_array, uint64_t *count); -extern int bt_field_signed_enumeration_get_mapping_labels( +extern enum bt_field_status bt_field_signed_enumeration_get_mapping_labels( const bt_field *field, bt_field_class_enumeration_mapping_label_array *label_array, uint64_t *count); diff --git a/include/babeltrace/trace-ir/field.h b/include/babeltrace/trace-ir/field.h index 3b53cc4b..9c2d6e18 100644 --- a/include/babeltrace/trace-ir/field.h +++ b/include/babeltrace/trace-ir/field.h @@ -32,6 +32,9 @@ /* For bt_field, bt_field_class */ #include +/* For enum bt_field_status */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -44,14 +47,16 @@ extern void bt_field_unsigned_integer_set_value(bt_field *field, extern void bt_field_real_set_value(bt_field *field, double value); -extern int bt_field_string_set_value(bt_field *field, const char *value); +extern enum bt_field_status bt_field_string_set_value(bt_field *field, + const char *value); -extern int bt_field_string_append(bt_field *field, const char *value); +extern enum bt_field_status bt_field_string_append(bt_field *field, + const char *value); -extern int bt_field_string_append_with_length(bt_field *field, +extern enum bt_field_status bt_field_string_append_with_length(bt_field *field, const char *value, uint64_t length); -extern int bt_field_string_clear(bt_field *field); +extern enum bt_field_status bt_field_string_clear(bt_field *field); extern bt_field *bt_field_structure_borrow_member_field_by_index( bt_field *field, uint64_t index); @@ -62,11 +67,11 @@ extern bt_field *bt_field_structure_borrow_member_field_by_name( extern bt_field *bt_field_array_borrow_element_field_by_index( bt_field *field, uint64_t index); -extern int bt_field_dynamic_array_set_length(bt_field *field, +extern enum bt_field_status bt_field_dynamic_array_set_length(bt_field *field, uint64_t length); -extern int bt_field_variant_select_option_field(bt_field *field, - uint64_t index); +extern enum bt_field_status bt_field_variant_select_option_field( + bt_field *field, uint64_t index); extern bt_field *bt_field_variant_borrow_selected_option_field( bt_field *field); diff --git a/lib/trace-ir/field.c b/lib/trace-ir/field.c index ef031963..d8ccc8a1 100644 --- a/lib/trace-ir/field.c +++ b/lib/trace-ir/field.c @@ -558,7 +558,7 @@ void bt_field_real_set_value(struct bt_field *field, double value) bt_field_set_single(field, true); } -int bt_field_unsigned_enumeration_get_mapping_labels( +enum bt_field_status bt_field_unsigned_enumeration_get_mapping_labels( const struct bt_field *field, bt_field_class_enumeration_mapping_label_array *label_array, uint64_t *count) @@ -571,11 +571,12 @@ int bt_field_unsigned_enumeration_get_mapping_labels( BT_ASSERT_PRE_FIELD_IS_SET(field, "Field"); BT_ASSERT_PRE_FIELD_HAS_CLASS_TYPE(field, BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION, "Field"); - return bt_field_class_unsigned_enumeration_get_mapping_labels_by_value( - field->class, int_field->value.u, label_array, count); + return (int) + bt_field_class_unsigned_enumeration_get_mapping_labels_by_value( + field->class, int_field->value.u, label_array, count); } -int bt_field_signed_enumeration_get_mapping_labels( +enum bt_field_status bt_field_signed_enumeration_get_mapping_labels( const struct bt_field *field, bt_field_class_enumeration_mapping_label_array *label_array, uint64_t *count) @@ -588,8 +589,9 @@ int bt_field_signed_enumeration_get_mapping_labels( BT_ASSERT_PRE_FIELD_IS_SET(field, "Field"); BT_ASSERT_PRE_FIELD_HAS_CLASS_TYPE(field, BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION, "Field"); - return bt_field_class_signed_enumeration_get_mapping_labels_by_value( - field->class, int_field->value.i, label_array, count); + return (int) + bt_field_class_signed_enumeration_get_mapping_labels_by_value( + field->class, int_field->value.i, label_array, count); } const char *bt_field_string_get_value(const struct bt_field *field) @@ -614,25 +616,36 @@ uint64_t bt_field_string_get_length(const struct bt_field *field) return string_field->length; } -int bt_field_string_set_value(struct bt_field *field, const char *value) +static inline +void clear_string_field(struct bt_field *field) +{ + struct bt_field_string *string_field = (void *) field; + + BT_ASSERT(field); + string_field->length = 0; + bt_field_set_single(field, true); +} + +enum bt_field_status bt_field_string_set_value(struct bt_field *field, + const char *value) { BT_ASSERT_PRE_NON_NULL(field, "Field"); BT_ASSERT_PRE_NON_NULL(value, "Value"); BT_ASSERT_PRE_FIELD_HOT(field, "Field"); BT_ASSERT_PRE_FIELD_HAS_CLASS_TYPE(field, BT_FIELD_CLASS_TYPE_STRING, "Field"); - bt_field_string_clear(field); + clear_string_field(field); return bt_field_string_append_with_length(field, value, (uint64_t) strlen(value)); } -int bt_field_string_append(struct bt_field *field, const char *value) +enum bt_field_status bt_field_string_append(struct bt_field *field, const char *value) { return bt_field_string_append_with_length(field, value, (uint64_t) strlen(value)); } -int bt_field_string_append_with_length(struct bt_field *field, +enum bt_field_status bt_field_string_append_with_length(struct bt_field *field, const char *value, uint64_t length) { struct bt_field_string *string_field = (void *) field; @@ -661,20 +674,17 @@ int bt_field_string_append_with_length(struct bt_field *field, ((char *) string_field->buf->data)[new_length] = '\0'; string_field->length = new_length; bt_field_set_single(field, true); - return 0; + return BT_FIELD_STATUS_OK; } -int bt_field_string_clear(struct bt_field *field) +enum bt_field_status bt_field_string_clear(struct bt_field *field) { - struct bt_field_string *string_field = (void *) field; - BT_ASSERT_PRE_NON_NULL(field, "Field"); BT_ASSERT_PRE_FIELD_HOT(field, "Field"); BT_ASSERT_PRE_FIELD_HAS_CLASS_TYPE(field, BT_FIELD_CLASS_TYPE_STRING, "Field"); - string_field->length = 0; - bt_field_set_single(field, true); - return 0; + clear_string_field(field); + return BT_FIELD_STATUS_OK; } uint64_t bt_field_array_get_length(const struct bt_field *field) @@ -686,9 +696,10 @@ uint64_t bt_field_array_get_length(const struct bt_field *field) return array_field->length; } -int bt_field_dynamic_array_set_length(struct bt_field *field, uint64_t length) +enum bt_field_status bt_field_dynamic_array_set_length(struct bt_field *field, + uint64_t length) { - int ret = 0; + int ret = BT_FIELD_STATUS_OK; struct bt_field_array *array_field = (void *) field; BT_ASSERT_PRE_NON_NULL(field, "Field"); @@ -714,7 +725,7 @@ int bt_field_dynamic_array_set_length(struct bt_field *field, uint64_t length) "dynamic array field: " "index=%" PRIu64 ", " "%![array-field-]+f", i, field); - ret = -1; + ret = BT_FIELD_STATUS_NOMEM; goto end; } @@ -849,7 +860,7 @@ const struct bt_field *bt_field_variant_borrow_selected_option_field_const( return borrow_variant_field_selected_option_field((void *) field); } -int bt_field_variant_select_option_field( +enum bt_field_status bt_field_variant_select_option_field( struct bt_field *field, uint64_t index) { struct bt_field_variant *var_field = (void *) field; @@ -861,7 +872,7 @@ int bt_field_variant_select_option_field( BT_ASSERT_PRE_VALID_INDEX(index, var_field->fields->len); var_field->selected_field = var_field->fields->pdata[index]; var_field->selected_index = index; - return 0; + return BT_FIELD_STATUS_OK; } uint64_t bt_field_variant_get_selected_option_field_index( -- 2.34.1