*/
#define _LGPL_SOURCE
-#include <assert.h>
#include <stddef.h>
#include <stdbool.h>
return field_val;
}
-LTTNG_HIDDEN
struct lttng_event_field_value *lttng_event_field_value_uint_create(
uint64_t val)
{
return &field_val->parent;
}
-LTTNG_HIDDEN
struct lttng_event_field_value *lttng_event_field_value_int_create(
int64_t val)
{
return field_val;
}
-LTTNG_HIDDEN
struct lttng_event_field_value *lttng_event_field_value_enum_uint_create(
uint64_t val)
{
return &field_val->parent.parent;
}
-LTTNG_HIDDEN
struct lttng_event_field_value *lttng_event_field_value_enum_int_create(
int64_t val)
{
return &field_val->parent.parent;
}
-LTTNG_HIDDEN
struct lttng_event_field_value *lttng_event_field_value_real_create(double val)
{
struct lttng_event_field_value_real *field_val = container_of(
return &field_val->parent;
}
-LTTNG_HIDDEN
struct lttng_event_field_value *lttng_event_field_value_string_create_with_size(
const char *val, size_t size)
{
goto error;
}
- assert(val);
+ LTTNG_ASSERT(val);
field_val->val = strndup(val, size);
if (!field_val->val) {
goto error;
return &field_val->parent;
}
-LTTNG_HIDDEN
struct lttng_event_field_value *lttng_event_field_value_string_create(
const char *val)
{
- assert(val);
+ LTTNG_ASSERT(val);
return lttng_event_field_value_string_create_with_size(val,
strlen(val));
}
lttng_event_field_value_destroy(field_val);
}
-LTTNG_HIDDEN
struct lttng_event_field_value *lttng_event_field_value_array_create(void)
{
struct lttng_event_field_value_array *field_val = container_of(
return &field_val->parent;
}
-LTTNG_HIDDEN
void lttng_event_field_value_destroy(struct lttng_event_field_value *field_val)
{
if (!field_val) {
return;
}
-LTTNG_HIDDEN
int lttng_event_field_value_enum_append_label_with_size(
struct lttng_event_field_value *field_val,
const char *label, size_t size)
int ret;
char *new_label;
- assert(field_val);
- assert(label);
+ LTTNG_ASSERT(field_val);
+ LTTNG_ASSERT(label);
new_label = strndup(label, size);
if (!new_label) {
ret = -1;
return ret;
}
-LTTNG_HIDDEN
int lttng_event_field_value_enum_append_label(
struct lttng_event_field_value *field_val,
const char *label)
{
- assert(label);
+ LTTNG_ASSERT(label);
return lttng_event_field_value_enum_append_label_with_size(field_val,
label, strlen(label));
}
-LTTNG_HIDDEN
int lttng_event_field_value_array_append(
struct lttng_event_field_value *array_field_val,
struct lttng_event_field_value *field_val)
{
- assert(array_field_val);
- assert(field_val);
+ LTTNG_ASSERT(array_field_val);
+ LTTNG_ASSERT(field_val);
return lttng_dynamic_pointer_array_add_pointer(
&container_of(array_field_val,
struct lttng_event_field_value_array, parent)->elems,
field_val);
}
-LTTNG_HIDDEN
int lttng_event_field_value_array_append_unavailable(
struct lttng_event_field_value *array_field_val)
{
- assert(array_field_val);
+ LTTNG_ASSERT(array_field_val);
return lttng_dynamic_pointer_array_add_pointer(
&container_of(array_field_val,
struct lttng_event_field_value_array, parent)->elems,
parent)->val;
break;
case LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM:
- *val = container_of(
- container_of(field_val,
- const struct lttng_event_field_value_enum,
- parent),
- const struct lttng_event_field_value_enum_uint,
- parent)->val;
+ {
+ const struct lttng_event_field_value_enum *field_val_enum = container_of(
+ field_val,
+ const struct lttng_event_field_value_enum,
+ parent);
+ const struct lttng_event_field_value_enum_uint
+ *field_val_enum_uint = container_of(
+ field_val_enum,
+ const struct lttng_event_field_value_enum_uint,
+ parent);
+ *val = field_val_enum_uint->val;
break;
+ }
default:
status = LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID;
goto end;
parent)->val;
break;
case LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM:
- *val = container_of(
- container_of(field_val,
- const struct lttng_event_field_value_enum,
- parent),
- const struct lttng_event_field_value_enum_int,
- parent)->val;
+ {
+ const struct lttng_event_field_value_enum *field_val_enum = container_of(
+ field_val,
+ const struct lttng_event_field_value_enum,
+ parent);
+ const struct lttng_event_field_value_enum_int
+ *field_val_enum_uint = container_of(
+ field_val_enum,
+ const struct lttng_event_field_value_enum_int,
+ parent);
+ *val = field_val_enum_uint->val;
break;
+ }
default:
status = LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID;
goto end;
return ret;
}
-const char *lttng_event_field_value_string_get_value(
- const struct lttng_event_field_value *field_val)
+enum lttng_event_field_value_status lttng_event_field_value_string_get_value(
+ const struct lttng_event_field_value *field_val,
+ const char **value)
{
- const char *ret;
+ enum lttng_event_field_value_status status;
if (!field_val || field_val->type != LTTNG_EVENT_FIELD_VALUE_TYPE_STRING) {
- ret = NULL;
+ status = LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID;
goto end;
}
- ret = container_of(field_val,
+ *value = container_of(field_val,
const struct lttng_event_field_value_string, parent)->val;
+ status = LTTNG_EVENT_FIELD_VALUE_STATUS_OK;
end:
- return ret;
+ return status;
}
enum lttng_event_field_value_status lttng_event_field_value_array_get_length(