From e3cabfafd7104fc0379e480e433ca1aa706946ba Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Thu, 10 Mar 2016 16:09:06 -0700 Subject: [PATCH] nvme_manage: accept more PCI address formats Change-Id: Ie8177b320271c9e7cb9b2216dbdd9c3c11f39579 Signed-off-by: Daniel Verkamp --- examples/nvme/nvme_manage/nvme_manage.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/examples/nvme/nvme_manage/nvme_manage.c b/examples/nvme/nvme_manage/nvme_manage.c index 7612132b70..7a66dc5d33 100644 --- a/examples/nvme/nvme_manage/nvme_manage.c +++ b/examples/nvme/nvme_manage/nvme_manage.c @@ -244,7 +244,19 @@ get_controller(void) p++; } - sscanf(p, "%x:%x:%x.%x", &domain, &bus, &devid, &function); + if (sscanf(p, "%x:%x:%x.%x", &domain, &bus, &devid, &function) == 4) { + /* Matched a full address - all variables are initialized */ + } else if (sscanf(p, "%x:%x:%x", &domain, &bus, &devid) == 3) { + function = 0; + } else if (sscanf(p, "%x:%x.%x", &bus, &devid, &function) == 3) { + domain = 0; + } else if (sscanf(p, "%x:%x", &bus, &devid) == 2) { + domain = 0; + function = 0; + } else { + return NULL; + } + pci_addr = (uint64_t)domain << 24; pci_addr |= (uint64_t)bus << 16; pci_addr |= (uint64_t)devid << 8;