X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fctf-ir%2Fattributes.c;h=f3d6ba10e8806d3757035d1637f6df0e2b1a66d4;hb=50842bdc4c21f3de2b63e29cdac730af8b6dcca6;hp=c6e8a232e885bc0c35fd08de3848a18ee87d6a3f;hpb=dc3fffef7b84cc4af1a7c99828fd57a106cd2257;p=babeltrace.git diff --git a/lib/ctf-ir/attributes.c b/lib/ctf-ir/attributes.c index c6e8a232..f3d6ba10 100644 --- a/lib/ctf-ir/attributes.c +++ b/lib/ctf-ir/attributes.c @@ -25,15 +25,24 @@ * SOFTWARE. */ +#define BT_LOG_TAG "ATTRS" +#include + +#include #include #include +#include +#include +#include -#define BT_CTF_ATTR_NAME_INDEX 0 -#define BT_CTF_ATTR_VALUE_INDEX 1 +#define BT_ATTR_NAME_INDEX 0 +#define BT_ATTR_VALUE_INDEX 1 BT_HIDDEN -struct bt_value *bt_ctf_attributes_create(void) +struct bt_value *bt_attributes_create(void) { + struct bt_value *attr_obj; + /* * Attributes: array value object of array value objects, each one * containing two entries: a string value object (attributes @@ -48,50 +57,65 @@ struct bt_value *bt_ctf_attributes_create(void) * ["tracer_minor", 5] * ] */ - return bt_value_array_create(); + BT_LOGD_STR("Creating attributes object."); + attr_obj = bt_value_array_create(); + if (!attr_obj) { + BT_LOGE_STR("Failed to create array value."); + } else { + BT_LOGD("Created attributes object: addr=%p", + attr_obj); + } + + return attr_obj; } BT_HIDDEN -void bt_ctf_attributes_destroy(struct bt_value *attr_obj) +void bt_attributes_destroy(struct bt_value *attr_obj) { + BT_LOGD("Destroying attributes object: addr=%p", attr_obj); bt_put(attr_obj); } BT_HIDDEN -int bt_ctf_attributes_get_count(struct bt_value *attr_obj) +int64_t bt_attributes_get_count(struct bt_value *attr_obj) { return bt_value_array_size(attr_obj); } BT_HIDDEN -const char *bt_ctf_attributes_get_field_name(struct bt_value *attr_obj, - int index) +const char *bt_attributes_get_field_name(struct bt_value *attr_obj, + uint64_t index) { int rc; const char *ret = NULL; struct bt_value *attr_field_obj = NULL; struct bt_value *attr_field_name_obj = NULL; - if (!attr_obj || index < 0) { + if (!attr_obj) { + BT_LOGW_STR("Invalid parameter: attributes object is NULL."); goto end; } attr_field_obj = bt_value_array_get(attr_obj, index); - if (!attr_field_obj) { + BT_LOGE("Cannot get attributes object's array value's element by index: " + "value-addr=%p, index=%" PRIu64, attr_obj, index); goto end; } attr_field_name_obj = bt_value_array_get(attr_field_obj, - BT_CTF_ATTR_NAME_INDEX); - + BT_ATTR_NAME_INDEX); if (!attr_field_name_obj) { + BT_LOGE("Cannot get attribute array value's element by index: " + "value-addr=%p, index=%" PRIu64, attr_field_obj, + (uint64_t) BT_ATTR_NAME_INDEX); goto end; } rc = bt_value_string_get(attr_field_name_obj, &ret); - if (rc) { + BT_LOGE("Cannot get raw value from string value: value-addr=%p", + attr_field_name_obj); ret = NULL; } @@ -102,24 +126,31 @@ end: } BT_HIDDEN -struct bt_value *bt_ctf_attributes_get_field_value(struct bt_value *attr_obj, - int index) +struct bt_value *bt_attributes_get_field_value(struct bt_value *attr_obj, + uint64_t index) { struct bt_value *value_obj = NULL; struct bt_value *attr_field_obj = NULL; - if (!attr_obj || index < 0) { + if (!attr_obj) { + BT_LOGW_STR("Invalid parameter: attributes object is NULL."); goto end; } attr_field_obj = bt_value_array_get(attr_obj, index); - if (!attr_field_obj) { + BT_LOGE("Cannot get attributes object's array value's element by index: " + "value-addr=%p, index=%" PRIu64, attr_obj, index); goto end; } value_obj = bt_value_array_get(attr_field_obj, - BT_CTF_ATTR_VALUE_INDEX); + BT_ATTR_VALUE_INDEX); + if (!value_obj) { + BT_LOGE("Cannot get attribute array value's element by index: " + "value-addr=%p, index=%" PRIu64, attr_field_obj, + (uint64_t) BT_ATTR_VALUE_INDEX); + } end: BT_PUT(attr_field_obj); @@ -127,17 +158,18 @@ end: } static -struct bt_value *bt_ctf_attributes_get_field_by_name( +struct bt_value *bt_attributes_get_field_by_name( struct bt_value *attr_obj, const char *name) { - int i; - int attr_size; + uint64_t i; + int64_t attr_size; struct bt_value *value_obj = NULL; struct bt_value *attr_field_name_obj = NULL; attr_size = bt_value_array_size(attr_obj); - if (attr_size < 0) { + BT_LOGE("Cannot get array value's size: value-addr=%p", + attr_obj); goto error; } @@ -146,19 +178,24 @@ struct bt_value *bt_ctf_attributes_get_field_by_name( const char *field_name; value_obj = bt_value_array_get(attr_obj, i); - if (!value_obj) { + BT_LOGE("Cannot get attributes object's array value's element by index: " + "value-addr=%p, index=%" PRIu64, attr_obj, i); goto error; } attr_field_name_obj = bt_value_array_get(value_obj, 0); - if (!attr_field_name_obj) { + BT_LOGE("Cannot get attribute array value's element by index: " + "value-addr=%p, index=%" PRIu64, + value_obj, (int64_t) 0); goto error; } ret = bt_value_string_get(attr_field_name_obj, &field_name); if (ret) { + BT_LOGE("Cannot get raw value from string value: value-addr=%p", + attr_field_name_obj); goto error; } @@ -181,40 +218,48 @@ error: } BT_HIDDEN -int bt_ctf_attributes_set_field_value(struct bt_value *attr_obj, +int bt_attributes_set_field_value(struct bt_value *attr_obj, const char *name, struct bt_value *value_obj) { int ret = 0; struct bt_value *attr_field_obj = NULL; if (!attr_obj || !name || !value_obj) { + BT_LOGW("Invalid parameter: attributes object, name, or value object is NULL: " + "attr-value-addr=%p, name-addr=%p, value-addr=%p", + attr_obj, name, value_obj); ret = -1; goto end; } - attr_field_obj = bt_ctf_attributes_get_field_by_name(attr_obj, name); - + attr_field_obj = bt_attributes_get_field_by_name(attr_obj, name); if (attr_field_obj) { ret = bt_value_array_set(attr_field_obj, - BT_CTF_ATTR_VALUE_INDEX, value_obj); + BT_ATTR_VALUE_INDEX, value_obj); goto end; } attr_field_obj = bt_value_array_create(); - if (!attr_field_obj) { + BT_LOGE_STR("Failed to create empty array value."); ret = -1; goto end; } ret = bt_value_array_append_string(attr_field_obj, name); ret |= bt_value_array_append(attr_field_obj, value_obj); - if (ret) { + BT_LOGE("Cannot append elements to array value: addr=%p", + attr_field_obj); goto end; } ret = bt_value_array_append(attr_obj, attr_field_obj); + if (ret) { + BT_LOGE("Cannot append element to array value: " + "array-value-addr=%p, element-value-addr=%p", + attr_obj, attr_field_obj); + } end: BT_PUT(attr_field_obj); @@ -223,24 +268,32 @@ end: } BT_HIDDEN -struct bt_value *bt_ctf_attributes_get_field_value_by_name( +struct bt_value *bt_attributes_get_field_value_by_name( struct bt_value *attr_obj, const char *name) { struct bt_value *value_obj = NULL; struct bt_value *attr_field_obj = NULL; if (!attr_obj || !name) { + BT_LOGW("Invalid parameter: attributes object or name is NULL: " + "value-addr=%p, name-addr=%p", attr_obj, name); goto end; } - attr_field_obj = bt_ctf_attributes_get_field_by_name(attr_obj, name); - + attr_field_obj = bt_attributes_get_field_by_name(attr_obj, name); if (!attr_field_obj) { + BT_LOGD("Cannot find attributes object's field by name: " + "value-addr=%p, name=\"%s\"", attr_obj, name); goto end; } value_obj = bt_value_array_get(attr_field_obj, - BT_CTF_ATTR_VALUE_INDEX); + BT_ATTR_VALUE_INDEX); + if (!value_obj) { + BT_LOGE("Cannot get attribute array value's element by index: " + "value-addr=%p, index=%" PRIu64, attr_field_obj, + (uint64_t) BT_ATTR_VALUE_INDEX); + } end: BT_PUT(attr_field_obj); @@ -249,23 +302,21 @@ end: } BT_HIDDEN -int bt_ctf_attributes_freeze(struct bt_value *attr_obj) +int bt_attributes_freeze(struct bt_value *attr_obj) { - int i; - int count; + uint64_t i; + int64_t count; int ret = 0; if (!attr_obj) { + BT_LOGW_STR("Invalid parameter: attributes object is NULL."); ret = -1; goto end; } + BT_LOGD("Freezing attributes object: value-addr=%p", attr_obj); count = bt_value_array_size(attr_obj); - - if (count < 0) { - ret = -1; - goto end; - } + assert(count >= 0); /* * We do not freeze the array value object itself here, since @@ -275,9 +326,11 @@ int bt_ctf_attributes_freeze(struct bt_value *attr_obj) for (i = 0; i < count; ++i) { struct bt_value *obj = NULL; - obj = bt_ctf_attributes_get_field_value(attr_obj, i); - + obj = bt_attributes_get_field_value(attr_obj, i); if (!obj) { + BT_LOGE("Cannot get attributes object's field value by index: " + "value-addr=%p, index=%" PRIu64, + attr_obj, i); ret = -1; goto end; }