int nodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags) { int ndevs = 0; size_t i; if (virNodeNumOfDevicesEnsureACL(conn) < 0) return -1; virCheckFlags(0, -1); nodeDeviceLock(); for (i = 0; i < driver->devs.count; i++) { virNodeDeviceObjPtr obj = driver->devs.objs[i]; virNodeDeviceObjLock(obj); if (virNodeNumOfDevicesCheckACL(conn, obj->def) && ((cap == NULL) || virNodeDeviceHasCap(obj, cap))) ++ndevs; virNodeDeviceObjUnlock(obj); } nodeDeviceUnlock(); return ndevs; }
static int nodeListDevices(virConnectPtr conn, const char *cap, char **const names, int maxnames, unsigned int flags ATTRIBUTE_UNUSED) { virDeviceMonitorStatePtr driver = conn->devMonPrivateData; int ndevs = 0; unsigned int i; nodeDeviceLock(driver); for (i = 0; i < driver->devs.count && ndevs < maxnames; i++) { virNodeDeviceObjLock(driver->devs.objs[i]); if (cap == NULL || virNodeDeviceHasCap(driver->devs.objs[i], cap)) { if ((names[ndevs++] = strdup(driver->devs.objs[i]->def->name)) == NULL) { virNodeDeviceObjUnlock(driver->devs.objs[i]); virReportOOMError(); goto failure; } } virNodeDeviceObjUnlock(driver->devs.objs[i]); } nodeDeviceUnlock(driver); return ndevs; failure: nodeDeviceUnlock(driver); --ndevs; while (--ndevs >= 0) VIR_FREE(names[ndevs]); return -1; }
static int nodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags ATTRIBUTE_UNUSED) { virDeviceMonitorStatePtr driver = conn->devMonPrivateData; int ndevs = 0; unsigned int i; nodeDeviceLock(driver); for (i = 0; i < driver->devs.count; i++) { virNodeDeviceObjLock(driver->devs.objs[i]); if ((cap == NULL) || virNodeDeviceHasCap(driver->devs.objs[i], cap)) ++ndevs; virNodeDeviceObjUnlock(driver->devs.objs[i]); } nodeDeviceUnlock(driver); return ndevs; }
int nodeListDevices(virConnectPtr conn, const char *cap, char **const names, int maxnames, unsigned int flags) { virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; int ndevs = 0; size_t i; if (virNodeListDevicesEnsureACL(conn) < 0) return -1; virCheckFlags(0, -1); nodeDeviceLock(driver); for (i = 0; i < driver->devs.count && ndevs < maxnames; i++) { virNodeDeviceObjPtr obj = driver->devs.objs[i]; virNodeDeviceObjLock(obj); if (virNodeListDevicesCheckACL(conn, obj->def) && (cap == NULL || virNodeDeviceHasCap(obj, cap))) { if (VIR_STRDUP(names[ndevs++], obj->def->name) < 0) { virNodeDeviceObjUnlock(obj); goto failure; } } virNodeDeviceObjUnlock(obj); } nodeDeviceUnlock(driver); return ndevs; failure: nodeDeviceUnlock(driver); --ndevs; while (--ndevs >= 0) VIR_FREE(names[ndevs]); return -1; }