X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fcommon%2Factions%2Fpath.c;h=250b5e905f4df7d751eecafc7b99c9ceb3a52af2;hb=edbac916fd984b0b50dc3f7cc352a94cb7f24287;hp=dbae34b9eb44f2e8609c6adc6b7e4d8cb3e9999a;hpb=482b3452b2855829d4c28fa370ca97c33c2accd7;p=lttng-tools.git diff --git a/src/common/actions/path.c b/src/common/actions/path.c index dbae34b9e..250b5e905 100644 --- a/src/common/actions/path.c +++ b/src/common/actions/path.c @@ -29,10 +29,6 @@ struct lttng_action_path *lttng_action_path_create( } lttng_dynamic_array_init(&path->indexes, sizeof(uint64_t), NULL); - ret = lttng_dynamic_array_set_count(&path->indexes, index_count); - if (ret) { - goto error; - } for (i = 0; i < index_count; i++) { ret = lttng_dynamic_array_add_element( @@ -101,37 +97,25 @@ end: LTTNG_HIDDEN int lttng_action_path_copy(const struct lttng_action_path *src, - struct lttng_action_path *dst) + struct lttng_action_path **dst) { int ret; - size_t i, src_count; + struct lttng_action_path *new_path; assert(src); assert(dst); - lttng_dynamic_array_init(&dst->indexes, sizeof(uint64_t), NULL); - src_count = lttng_dynamic_array_get_count(&src->indexes); - - ret = lttng_dynamic_array_set_count(&dst->indexes, src_count); - if (ret) { - goto error; - } - - for (i = 0; i < src_count; i++) { - const void *index = lttng_dynamic_array_get_element( - &src->indexes, i); - - ret = lttng_dynamic_array_add_element(&dst->indexes, index); - if (ret) { - goto error; - } + new_path = lttng_action_path_create( + (uint64_t *) lttng_dynamic_array_get_element( + &src->indexes, 0), + lttng_dynamic_array_get_count(&src->indexes)); + if (!new_path) { + ret = -1; + } else { + ret = 0; + *dst = new_path; } - ret = 0; - goto end; -error: - lttng_dynamic_array_reset(&dst->indexes); -end: return ret; } @@ -152,6 +136,13 @@ ssize_t lttng_action_path_create_from_payload( header = (typeof(header)) header_view.buffer.data; consumed_size += header_view.buffer.size; + + /* + * An action path of size 0 can exist and represents a trigger with a + * single non-list action. Handle it differently since a payload view of + * size 0 is considered invalid. + */ + if (header->index_count != 0) { const struct lttng_payload_view indexes_view = lttng_payload_view_from_view(view, @@ -170,9 +161,15 @@ ssize_t lttng_action_path_create_from_payload( if (!action_path) { goto end; } + } else { + action_path = lttng_action_path_create(NULL, 0); + if (!action_path) { + goto end; + } } ret = consumed_size; + *_action_path = action_path; end: return ret; }