int identify_disks()

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;
}