diff --git a/lib/nvme/nvme.c b/lib/nvme/nvme.c index ffe733ae9..dc657966f 100644 --- a/lib/nvme/nvme.c +++ b/lib/nvme/nvme.c @@ -711,7 +711,7 @@ spdk_nvme_transport_id_adrfam_str(enum spdk_nvmf_adrfam adrfam) int spdk_nvme_transport_id_parse(struct spdk_nvme_transport_id *trid, const char *str) { - const char *sep; + const char *sep, *sep1; const char *whitespace = " \t\n"; size_t key_len, val_len; char key[32]; @@ -731,6 +731,11 @@ spdk_nvme_transport_id_parse(struct spdk_nvme_transport_id *trid, const char *st SPDK_ERRLOG("Key without ':' or '=' separator\n"); return -EINVAL; } + } else { + sep1 = strchr(str, '='); + if ((sep1 != NULL) && (sep1 < sep)) { + sep = sep1; + } } key_len = sep - str; diff --git a/test/unit/lib/nvme/nvme.c/nvme_ut.c b/test/unit/lib/nvme/nvme.c/nvme_ut.c index a339cb8e9..6925a2cfd 100644 --- a/test/unit/lib/nvme/nvme.c/nvme_ut.c +++ b/test/unit/lib/nvme/nvme.c/nvme_ut.c @@ -913,6 +913,11 @@ test_trid_parse_and_compare(void) CU_ASSERT(spdk_nvme_transport_id_parse(&trid1, "trtype:PCIe traddr:0000:04:00.0") == 0); CU_ASSERT(spdk_nvme_transport_id_parse(&trid2, "trtype:PCIe traddr:05:00.0") == 0); CU_ASSERT(spdk_nvme_transport_id_compare(&trid1, &trid2) < 0); + + memset_trid(&trid1, &trid2); + CU_ASSERT(spdk_nvme_transport_id_parse(&trid1, "trtype=PCIe traddr=0000:04:00.0") == 0); + CU_ASSERT(spdk_nvme_transport_id_parse(&trid2, "trtype=PCIe traddr=05:00.0") == 0); + CU_ASSERT(spdk_nvme_transport_id_compare(&trid1, &trid2) < 0); } static void