value_type == LTTNG_PROCESS_ATTR_VALUE_TYPE_GROUP_NAME;
}
-LTTNG_HIDDEN
enum lttng_error_code process_attr_value_from_comm(
enum lttng_domain_type domain,
enum lttng_process_attr process_attr,
name = strdup(value_view->data);
if (!name) {
ret = LTTNG_ERR_NOMEM;
+ goto error;
}
}
}
/* Only expect a payload for name value types. */
- if (is_value_type_name(value_type) && value_view->size == 0) {
+ if (is_value_type_name(value_type) &&
+ (!value_view || value_view->size == 0)) {
ret = LTTNG_ERR_INVALID_PROTOCOL;
goto error;
- } else if (!is_value_type_name(value_type) && value_view->size != 0) {
+ } else if (!is_value_type_name(value_type) && value_view &&
+ value_view->size != 0) {
ret = LTTNG_ERR_INVALID_PROTOCOL;
goto error;
}
*_value = value;
value = NULL;
+ free(name);
return LTTNG_OK;
error:
free(name);
return ret;
}
-LTTNG_HIDDEN
const char *lttng_process_attr_to_string(enum lttng_process_attr process_attr)
{
switch (process_attr) {
process_attr_value_destroy(value);
}
-LTTNG_HIDDEN
struct lttng_process_attr_values *lttng_process_attr_values_create(void)
{
struct lttng_process_attr_values *values = zmalloc(sizeof(*values));
return values;
}
-LTTNG_HIDDEN
unsigned int _lttng_process_attr_values_get_count(
const struct lttng_process_attr_values *values)
{
&values->array);
}
-LTTNG_HIDDEN
const struct process_attr_value *lttng_process_attr_tracker_values_get_at_index(
const struct lttng_process_attr_values *values,
unsigned int index)
return ret;
}
-LTTNG_HIDDEN
int lttng_process_attr_values_serialize(
const struct lttng_process_attr_values *values,
struct lttng_dynamic_buffer *buffer)
return ret;
}
-LTTNG_HIDDEN
ssize_t lttng_process_attr_values_create_from_buffer(
enum lttng_domain_type domain,
enum lttng_process_attr process_attr,
header_view = lttng_buffer_view_from_view(
buffer_view, 0, sizeof(*header));
- if (!header_view.data) {
+ if (!lttng_buffer_view_is_valid(&header_view)) {
goto error;
}
+
offset = header_view.size;
header = (typeof(header)) header_view.data;
value_view = lttng_buffer_view_from_view(
buffer_view, offset, sizeof(*value_comm));
- if (!value_view.data) {
+ if (!lttng_buffer_view_is_valid(&value_view)) {
goto error;
}
value_name_view = lttng_buffer_view_from_view(
buffer_view, offset,
value_comm->value.name_len);
+ if (!lttng_buffer_view_is_valid(&value_name_view)) {
+ goto error;
+ }
+
offset += value_name_view.size;
}
+
ret_code = process_attr_value_from_comm(domain, process_attr,
type, &value_comm->value.integral,
&value_name_view, &value);
return -1;
}
-LTTNG_HIDDEN
void lttng_process_attr_values_destroy(struct lttng_process_attr_values *values)
{
if (!values) {
free(values);
}
-LTTNG_HIDDEN
struct process_attr_value *process_attr_value_copy(
const struct process_attr_value *value)
{
return NULL;
}
-LTTNG_HIDDEN
unsigned long process_attr_value_hash(const struct process_attr_value *a)
{
unsigned long hash = hash_key_ulong((void *) a->type, lttng_ht_seed);
return hash;
}
-LTTNG_HIDDEN
bool process_attr_tracker_value_equal(const struct process_attr_value *a,
const struct process_attr_value *b)
{
}
}
-LTTNG_HIDDEN
void process_attr_value_destroy(struct process_attr_value *value)
{
if (!value) {