include:
<dl>
<dt><code>class</code></dt>
- <dd>Combined class, subclass and
+ <dd>Optional element for combined class, subclass and
programming interface codes as 6-digit hexadecimal number.
<span class="since">Since 5.2.0</span></dd>
<dt><code>domain</code></dt>
{
size_t i;
- virBufferAsprintf(buf, "<class>0x%.6x</class>\n", data->pci_dev.klass);
+ if (data->pci_dev.klass >= 0)
+ virBufferAsprintf(buf, "<class>0x%.6x</class>\n", data->pci_dev.klass);
virBufferAsprintf(buf, "<domain>%d</domain>\n",
data->pci_dev.domain);
virBufferAsprintf(buf, "<bus>%d</bus>\n", data->pci_dev.bus);
orignode = ctxt->node;
ctxt->node = node;
- if (virNodeDevCapsDefParseHexId("string(./class[1])", ctxt,
- &pci_dev->klass, def,
- _("no PCI class supplied for '%s'"),
- _("invalid PCI class supplied for '%s'")) < 0)
- goto out;
-
- if (pci_dev->klass > 0xffffff) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("invalid PCI class supplied for '%s'"), def->name);
- goto out;
+ if ((tmp = virXPathString("string(./class[1])", ctxt))) {
+ if (virStrToLong_i(tmp, NULL, 16, &pci_dev->klass) < 0 ||
+ pci_dev->klass > 0xffffff) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("invalid PCI class supplied for '%s'"), def->name);
+ goto out;
+ }
+ VIR_FREE(tmp);
+ } else {
+ pci_dev->klass = -1;
}
if (virNodeDevCapsDefParseULong("number(./domain[1])", ctxt,
privileged = driver->privileged;
nodeDeviceUnlock();
- if (udevGetUintProperty(device, "PCI_CLASS", &pci_dev->klass, 16) < 0)
+ pci_dev->klass = -1;
+ if (udevGetIntProperty(device, "PCI_CLASS", &pci_dev->klass, 16) < 0)
goto cleanup;
if ((p = strrchr(def->sysfs_path, '/')) == NULL ||