in src/identify_disks.c [293:327]
int identify_disks(struct context *ctx)
{
struct dirent **namelist = NULL;
json_object *namespaces_array = json_object_new_array();
int n = scandir(SYS_CLASS_NVME_PATH, &namelist, is_azure_nvme_controller, versionsort);
if (n < 0)
{
fprintf(stderr, "no NVMe devices in %s: %m\n", SYS_CLASS_NVME_PATH);
n = 0;
}
DEBUG_PRINTF("found %d controllers\n", n);
for (int i = 0; i < n; i++)
{
struct nvme_controller ctrl;
initialize_nvme_controller(&ctrl, namelist[i]->d_name);
enumerate_namespaces_for_controller(&ctrl, ctx, namespaces_array);
free(namelist[i]);
}
free(namelist);
if (ctx->output_format == JSON)
{
int flags = JSON_C_TO_STRING_NOSLASHESCAPE | JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED;
const char *json_output = json_object_to_json_string_ext(namespaces_array, flags);
printf("%s\n", json_output);
json_object_put(namespaces_array);
}
return 0;
}