+/*
+ * List map(s) of session and domain.
+ *
+ * If map_name is NULL, all maps are listed.
+ */
+static int list_maps(const char *desired_map_name)
+{
+ struct lttng_map_list *map_list = NULL;
+ enum lttng_map_status map_status;
+ enum lttng_error_code ret_code;
+ unsigned int i, map_count;
+ int ret = CMD_SUCCESS;
+
+ DBG("Listing map(s) (%s)", desired_map_name ? : "<all>");
+
+ ret_code = lttng_list_maps(handle, &map_list);
+ if (ret_code != LTTNG_OK) {
+ ERR("Error getting map list");
+ ret = CMD_ERROR;
+ goto end;
+ }
+
+ map_status = lttng_map_list_get_count(map_list, &map_count);
+ if (map_status != LTTNG_MAP_STATUS_OK) {
+ ERR("Error getting map list element count");
+ ret = CMD_ERROR;
+ goto end;
+ }
+
+ MSG("Maps:\n-------------");
+ for (i = 0; i < map_count; i++) {
+ const struct lttng_map *map = NULL;
+ const char *map_name = NULL;
+ map = lttng_map_list_get_at_index(map_list, i);
+ if (!map) {
+ ret = CMD_ERROR;
+ ERR("Error getting map from list: index = %u", i);
+ goto end;
+ }
+
+ map_status = lttng_map_get_name(map, &map_name);
+ if (map_status != LTTNG_MAP_STATUS_OK) {
+ ERR("Error getting map name");
+ ret = CMD_ERROR;
+ goto end;
+ }
+
+ if (desired_map_name != NULL) {
+ if (strncmp(map_name, desired_map_name, NAME_MAX) == 0) {
+ print_map(map);
+ break;
+ }
+ } else {
+ print_map(map);
+ }
+ }
+end:
+ // Should be in its own patch.
+ lttng_map_list_destroy(map_list);
+ return ret;
+}
+