-/*
- * Protected by session mutex held by caller.
- * On success, _ids and the strings it contains must be freed by caller.
- */
-ssize_t lttng_tracker_id_get_list(const struct lttng_tracker_list *tracker_list,
- struct lttng_tracker_id **_ids)
-{
- struct lttng_tracker_list_node *n;
- ssize_t count = 0, i = 0, retval = 0;
- struct lttng_tracker_id *ids;
-
- switch (tracker_list->state) {
- case LTTNG_TRACK_LIST:
- cds_list_for_each_entry (
- n, &tracker_list->list_head, list_node) {
- count++;
- }
- ids = zmalloc(sizeof(*ids) * count);
- if (ids == NULL) {
- PERROR("Failed to allocate tracked ID list");
- retval = -LTTNG_ERR_NOMEM;
- goto end;
- }
- cds_list_for_each_entry (
- n, &tracker_list->list_head, list_node) {
- ids[i].type = n->id.type;
- ids[i].value = n->id.value;
- if (ids[i].type == LTTNG_ID_STRING) {
- ids[i].string = strdup(n->id.string);
- if (!ids[i].string) {
- retval = -LTTNG_ERR_NOMEM;
- goto error;
- }
- }
- i++;
- }
- *_ids = ids;
- retval = count;
- break;
- case LTTNG_TRACK_ALL:
- ids = zmalloc(sizeof(*ids));
- if (ids == NULL) {
- PERROR("Failed to allocate tracked ID list");
- retval = -LTTNG_ERR_NOMEM;
- goto end;
- }
- ids->type = LTTNG_TRACK_ALL;
- *_ids = ids;
- retval = 1;
- break;
- case LTTNG_TRACK_NONE:
- /* No ids track, so we return 0 element. */
- *_ids = NULL;
- break;