mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
xen_common: Change xenParsePCIList to use virConfGetValueStringList
The `if(!list || list->type != VIR_CONF_LIST)` check couldn't be written in a 100% similar way. Instead, we're just checking whether `virConfGetValueStringList() <= 0` and creating a new function to: - return -1 in case virConfGetValueStringList fails either due to some allocation failure or when traversing the list; - resetting the last error and return 0 otherwise; Taking this approach we can have the behaviour with the new code as close as possible to the old one. Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
b98d936c19
commit
5f0c1c1e25
@ -454,21 +454,41 @@ xenParsePCI(char *entry)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
xenHandleConfGetValueStringListErrors(int ret)
|
||||||
|
{
|
||||||
|
if (ret < 0) {
|
||||||
|
/* It means virConfGetValueStringList() didn't fail because the
|
||||||
|
* cval->type switch fell through - since we're passing
|
||||||
|
* @compatString == false - assumes failures for memory allocation
|
||||||
|
* and VIR_CONF_LIST traversal failure should cause -1 to be
|
||||||
|
* returned to the caller with the error message set. */
|
||||||
|
if (virGetLastErrorCode() != VIR_ERR_INTERNAL_ERROR)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* If we did fall through the switch, then ignore and clear the
|
||||||
|
* last error. */
|
||||||
|
virResetLastError();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xenParsePCIList(virConfPtr conf, virDomainDefPtr def)
|
xenParsePCIList(virConfPtr conf, virDomainDefPtr def)
|
||||||
{
|
{
|
||||||
virConfValuePtr list = virConfGetValue(conf, "pci");
|
VIR_AUTOPTR(virString) pcis = NULL;
|
||||||
|
virString *entries = NULL;
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (!list || list->type != VIR_CONF_LIST)
|
if ((rc = virConfGetValueStringList(conf, "pci", false, &pcis)) <= 0)
|
||||||
return 0;
|
return xenHandleConfGetValueStringListErrors(rc);
|
||||||
|
|
||||||
for (list = list->list; list; list = list->next) {
|
for (entries = pcis; *entries; entries++) {
|
||||||
|
virString entry = *entries;
|
||||||
virDomainHostdevDefPtr hostdev;
|
virDomainHostdevDefPtr hostdev;
|
||||||
|
|
||||||
if ((list->type != VIR_CONF_STRING) || (list->str == NULL))
|
if (!(hostdev = xenParsePCI(entry)))
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!(hostdev = xenParsePCI(list->str)))
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (VIR_APPEND_ELEMENT(def->hostdevs, def->nhostdevs, hostdev) < 0) {
|
if (VIR_APPEND_ELEMENT(def->hostdevs, def->nhostdevs, hostdev) < 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user