提交 5eb8a7ac 编写于 作者: J Jiri Denemark

util: Slightly refactor PCI list functions

In order to be able to steal PCI device by its index in the list.
上级 ea1a9b5f
......@@ -1000,10 +1000,12 @@ pciDeviceListAdd;
pciDeviceListCount;
pciDeviceListDel;
pciDeviceListFind;
pciDeviceListFindIndex;
pciDeviceListFree;
pciDeviceListGet;
pciDeviceListNew;
pciDeviceListSteal;
pciDeviceListStealIndex;
pciDeviceNetName;
pciDeviceReAttachInit;
pciDeviceSetManaged;
......
......@@ -1554,35 +1554,36 @@ pciDeviceListCount(pciDeviceList *list)
}
pciDevice *
pciDeviceListSteal(pciDeviceList *list,
pciDevice *dev)
pciDeviceListStealIndex(pciDeviceList *list,
int idx)
{
pciDevice *ret = NULL;
int i;
for (i = 0; i < list->count; i++) {
if (list->devs[i]->domain != dev->domain ||
list->devs[i]->bus != dev->bus ||
list->devs[i]->slot != dev->slot ||
list->devs[i]->function != dev->function)
continue;
pciDevice *ret;
ret = list->devs[i];
if (idx < 0 || idx >= list->count)
return NULL;
if (i != --list->count)
memmove(&list->devs[i],
&list->devs[i+1],
sizeof(*list->devs) * (list->count-i));
ret = list->devs[idx];
if (VIR_REALLOC_N(list->devs, list->count) < 0) {
; /* not fatal */
}
if (idx != --list->count) {
memmove(&list->devs[idx],
&list->devs[idx + 1],
sizeof(*list->devs) * (list->count - idx));
}
break;
if (VIR_REALLOC_N(list->devs, list->count) < 0) {
; /* not fatal */
}
return ret;
}
pciDevice *
pciDeviceListSteal(pciDeviceList *list,
pciDevice *dev)
{
return pciDeviceListStealIndex(list, pciDeviceListFindIndex(list, dev));
}
void
pciDeviceListDel(pciDeviceList *list,
pciDevice *dev)
......@@ -1592,8 +1593,8 @@ pciDeviceListDel(pciDeviceList *list,
pciFreeDevice(ret);
}
pciDevice *
pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
int
pciDeviceListFindIndex(pciDeviceList *list, pciDevice *dev)
{
int i;
......@@ -1602,8 +1603,19 @@ pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
list->devs[i]->bus == dev->bus &&
list->devs[i]->slot == dev->slot &&
list->devs[i]->function == dev->function)
return list->devs[i];
return NULL;
return i;
return -1;
}
pciDevice *
pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
{
int i;
if ((i = pciDeviceListFindIndex(list, dev)) >= 0)
return list->devs[i];
else
return NULL;
}
......
......@@ -75,10 +75,14 @@ pciDevice * pciDeviceListGet (pciDeviceList *list,
int pciDeviceListCount (pciDeviceList *list);
pciDevice * pciDeviceListSteal (pciDeviceList *list,
pciDevice *dev);
pciDevice * pciDeviceListStealIndex(pciDeviceList *list,
int idx);
void pciDeviceListDel (pciDeviceList *list,
pciDevice *dev);
pciDevice * pciDeviceListFind (pciDeviceList *list,
pciDevice *dev);
int pciDeviceListFindIndex(pciDeviceList *list,
pciDevice *dev);
/*
* Callback that will be invoked once for each file
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册