{
struct lttng_event_field_value *field_val;
- field_val = (lttng_event_field_value *) zmalloc(size);
+ field_val = zmalloc<lttng_event_field_value>(size);
if (!field_val) {
goto end;
}
{
struct lttng_event_field_value_uint *field_val;
- field_val = container_of(create_empty_field_val(
+ field_val = lttng::utils::container_of(create_empty_field_val(
LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT,
sizeof(*field_val)),
- struct lttng_event_field_value_uint, parent);
+ <tng_event_field_value_uint::parent);
if (!field_val) {
goto error;
}
{
struct lttng_event_field_value_int *field_val;
- field_val = container_of(create_empty_field_val(
+ field_val = lttng::utils::container_of(create_empty_field_val(
LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT,
sizeof(*field_val)),
- struct lttng_event_field_value_int, parent);
+ <tng_event_field_value_int::parent);
if (!field_val) {
goto error;
}
{
struct lttng_event_field_value_enum *field_val;
- field_val = container_of(create_empty_field_val(type, size),
- struct lttng_event_field_value_enum, parent);
+ field_val = lttng::utils::container_of(create_empty_field_val(type, size),
+ <tng_event_field_value_enum::parent);
if (!field_val) {
goto error;
}
{
struct lttng_event_field_value_enum_uint *field_val;
- field_val = container_of(create_enum_field_val(
+ field_val = lttng::utils::container_of(create_enum_field_val(
LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM,
sizeof(*field_val)),
- struct lttng_event_field_value_enum_uint, parent);
+ <tng_event_field_value_enum_uint::parent);
if (!field_val) {
goto error;
}
{
struct lttng_event_field_value_enum_int *field_val;
- field_val = container_of(create_enum_field_val(
+ field_val = lttng::utils::container_of(create_enum_field_val(
LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM,
sizeof(*field_val)),
- struct lttng_event_field_value_enum_int, parent);
+ <tng_event_field_value_enum_int::parent);
if (!field_val) {
goto error;
}
struct lttng_event_field_value *lttng_event_field_value_real_create(double val)
{
- struct lttng_event_field_value_real *field_val = container_of(
+ struct lttng_event_field_value_real *field_val = lttng::utils::container_of(
create_empty_field_val(
LTTNG_EVENT_FIELD_VALUE_TYPE_REAL,
sizeof(*field_val)),
- struct lttng_event_field_value_real, parent);
+ <tng_event_field_value_real::parent);
if (!field_val) {
goto error;
struct lttng_event_field_value *lttng_event_field_value_string_create_with_size(
const char *val, size_t size)
{
- struct lttng_event_field_value_string *field_val = container_of(
+ struct lttng_event_field_value_string *field_val = lttng::utils::container_of(
create_empty_field_val(
LTTNG_EVENT_FIELD_VALUE_TYPE_STRING,
sizeof(*field_val)),
- struct lttng_event_field_value_string, parent);
+ <tng_event_field_value_string::parent);
if (!field_val) {
goto error;
}
- LTTNG_ASSERT(val);
- field_val->val = strndup(val, size);
+ if (size) {
+ LTTNG_ASSERT(val);
+ field_val->val = strndup(val, size);
+ } else {
+ /*
+ * User code do not expect a NULL string pointer. Populate with
+ * an empty string when length is 0.
+ */
+ field_val->val = strdup("");
+ }
if (!field_val->val) {
goto error;
}
struct lttng_event_field_value *lttng_event_field_value_array_create(void)
{
- struct lttng_event_field_value_array *field_val = container_of(
+ struct lttng_event_field_value_array *field_val = lttng::utils::container_of(
create_empty_field_val(
LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY,
sizeof(*field_val)),
- struct lttng_event_field_value_array, parent);
+ <tng_event_field_value_array::parent);
if (!field_val) {
goto error;
case LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM:
{
struct lttng_event_field_value_enum *enum_field_val =
- container_of(field_val,
- struct lttng_event_field_value_enum, parent);
+ lttng::utils::container_of(field_val,
+ <tng_event_field_value_enum::parent);
lttng_dynamic_pointer_array_reset(&enum_field_val->labels);
break;
case LTTNG_EVENT_FIELD_VALUE_TYPE_STRING:
{
struct lttng_event_field_value_string *str_field_val =
- container_of(field_val,
- struct lttng_event_field_value_string, parent);
+ lttng::utils::container_of(field_val,
+ <tng_event_field_value_string::parent);
free(str_field_val->val);
break;
case LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY:
{
struct lttng_event_field_value_array *array_field_expr =
- container_of(field_val,
- struct lttng_event_field_value_array,
- parent);
+ lttng::utils::container_of(field_val,
+ <tng_event_field_value_array::parent);
lttng_dynamic_pointer_array_reset(&array_field_expr->elems);
break;
}
ret = lttng_dynamic_pointer_array_add_pointer(
- &container_of(field_val,
- struct lttng_event_field_value_enum, parent)->labels,
+ <tng::utils::container_of(field_val,
+ <tng_event_field_value_enum::parent)->labels,
new_label);
if (ret == 0) {
new_label = NULL;
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,
+ <tng::utils::container_of(array_field_val,
+ <tng_event_field_value_array::parent)->elems,
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,
+ <tng::utils::container_of(array_field_val,
+ <tng_event_field_value_array::parent)->elems,
NULL);
}
switch (field_val->type) {
case LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT:
- *val = container_of(field_val,
- const struct lttng_event_field_value_uint,
- parent)->val;
+ *val = lttng::utils::container_of(field_val,
+ <tng_event_field_value_uint::parent)->val;
break;
case LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM:
{
- 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);
+ const struct lttng_event_field_value_enum *field_val_enum =
+ lttng::utils::container_of(
+ field_val, <tng_event_field_value_enum::parent);
+ const struct lttng_event_field_value_enum_uint *field_val_enum_uint =
+ lttng::utils::container_of(field_val_enum,
+ <tng_event_field_value_enum_uint::parent);
*val = field_val_enum_uint->val;
break;
}
switch (field_val->type) {
case LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT:
- *val = container_of(field_val,
- const struct lttng_event_field_value_int,
- parent)->val;
+ *val = lttng::utils::container_of(field_val,
+ <tng_event_field_value_int::parent)->val;
break;
case LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM:
{
- const struct lttng_event_field_value_enum *field_val_enum = container_of(
+ const struct lttng_event_field_value_enum *field_val_enum = lttng::utils::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);
+ <tng_event_field_value_enum::parent);
+ const struct lttng_event_field_value_enum_int *field_val_enum_uint =
+ lttng::utils::container_of(field_val_enum,
+ <tng_event_field_value_enum_int::parent);
*val = field_val_enum_uint->val;
break;
}
goto end;
}
- *val = container_of(field_val,
- const struct lttng_event_field_value_real, parent)->val;
+ *val = lttng::utils::container_of(field_val,
+ <tng_event_field_value_real::parent)->val;
status = LTTNG_EVENT_FIELD_VALUE_STATUS_OK;
end:
}
*count = (unsigned int) lttng_dynamic_pointer_array_get_count(
- &container_of(field_val,
- const struct lttng_event_field_value_enum,
- parent)->labels);
+ <tng::utils::container_of(field_val,
+ <tng_event_field_value_enum::parent)->labels);
status = LTTNG_EVENT_FIELD_VALUE_STATUS_OK;
end:
goto end;
}
- enum_field_val = container_of(field_val,
- const struct lttng_event_field_value_enum, parent);
+ enum_field_val = lttng::utils::container_of(field_val,
+ <tng_event_field_value_enum::parent);
if (index >= lttng_dynamic_pointer_array_get_count(&enum_field_val->labels)) {
ret = NULL;
goto end;
}
- *value = container_of(field_val,
- const struct lttng_event_field_value_string, parent)->val;
+ *value = lttng::utils::container_of(field_val,
+ <tng_event_field_value_string::parent)->val;
status = LTTNG_EVENT_FIELD_VALUE_STATUS_OK;
end:
}
*length = (unsigned int) lttng_dynamic_pointer_array_get_count(
- &container_of(field_val,
- const struct lttng_event_field_value_array,
- parent)->elems);
+ <tng::utils::container_of(field_val,
+ <tng_event_field_value_array::parent)->elems);
status = LTTNG_EVENT_FIELD_VALUE_STATUS_OK;
end:
goto end;
}
- array_field_val = container_of(field_val,
- const struct lttng_event_field_value_array, parent);
+ array_field_val = lttng::utils::container_of(
+ field_val, <tng_event_field_value_array::parent);
if (index >= lttng_dynamic_pointer_array_get_count(&array_field_val->elems)) {
status = LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID;