pci: explain how empty strings are rejected in DBDF
authorGaetan Rivet <grive@u256.net>
Wed, 13 May 2020 10:47:51 +0000 (12:47 +0200)
committerDavid Marchand <david.marchand@redhat.com>
Tue, 19 May 2020 09:18:38 +0000 (11:18 +0200)
Empty strings are forbidden as input to rte_pci_addr_parse().
It is explicitly enforced in BDF parsing as parsing the bus
field will immediately fail. The related check is commented.

It is implicitly enforced in DBDF parsing, as the domain would be
parsed to 0 without error, but the check `end[0] != ':'` afterward
will return -EINVAL.

Enforcing consistency between parsers by reading the code is not helped
by this property being implicit. Add a comment to explain.

Signed-off-by: Gaetan Rivet <grive@u256.net>
Acked-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
lib/librte_pci/rte_pci.c

index 5f7726f..9c80c4b 100644 (file)
@@ -84,6 +84,10 @@ pci_dbdf_parse(const char *input, struct rte_pci_addr *dev_addr)
 
        errno = 0;
        val = strtoul(in, &end, 16);
+       /* Empty string is not an error for strtoul, but the check
+        *   end[0] != ':'
+        * will detect the issue.
+        */
        if (errno != 0 || end[0] != ':' || val > UINT32_MAX)
                return -EINVAL;
        dev_addr->domain = (uint32_t)val;