From a9d33be34e5f402d5810f2e33415a27448d8b0ba Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Thu, 6 Apr 2017 09:37:57 -0400 Subject: [PATCH] interface: Introduce virInterfaceObjGetNames Unlike other drivers, this is a test driver only API. Still combining the logic of testConnectListInterfaces and testConnectListDefinedInterfaces makes things a bit easier in the long run. Signed-off-by: John Ferlan --- src/conf/virinterfaceobj.c | 32 ++++++++++++++++++++++++ src/conf/virinterfaceobj.h | 6 +++++ src/libvirt_private.syms | 1 + src/test/test_driver.c | 50 ++++++-------------------------------- 4 files changed, 47 insertions(+), 42 deletions(-) diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c index 89a4e4ac8b..e80db23fbf 100644 --- a/src/conf/virinterfaceobj.c +++ b/src/conf/virinterfaceobj.c @@ -234,3 +234,35 @@ virInterfaceObjNumOfInterfaces(virInterfaceObjListPtr interfaces, return ninterfaces; } + + +int +virInterfaceObjGetNames(virInterfaceObjListPtr interfaces, + bool wantActive, + char **const names, + int maxnames) +{ + int nnames = 0; + size_t i; + + for (i = 0; i < interfaces->count && nnames < maxnames; i++) { + virInterfaceObjPtr obj = interfaces->objs[i]; + virInterfaceObjLock(obj); + if (wantActive == virInterfaceObjIsActive(obj)) { + if (VIR_STRDUP(names[nnames], obj->def->name) < 0) { + virInterfaceObjUnlock(obj); + goto failure; + } + nnames++; + } + virInterfaceObjUnlock(obj); + } + + return nnames; + + failure: + while (--nnames >= 0) + VIR_FREE(names[nnames]); + + return -1; +} diff --git a/src/conf/virinterfaceobj.h b/src/conf/virinterfaceobj.h index 2f07174d0b..5b0527d109 100644 --- a/src/conf/virinterfaceobj.h +++ b/src/conf/virinterfaceobj.h @@ -85,4 +85,10 @@ int virInterfaceObjNumOfInterfaces(virInterfaceObjListPtr interfaces, bool wantActive); +int +virInterfaceObjGetNames(virInterfaceObjListPtr interfaces, + bool wantActive, + char **const names, + int maxnames); + #endif /* __VIRINTERFACEOBJ_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index ab45bb752b..4b3b790bdf 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -935,6 +935,7 @@ virDomainObjListRename; virInterfaceObjAssignDef; virInterfaceObjFindByMACString; virInterfaceObjFindByName; +virInterfaceObjGetNames; virInterfaceObjListClone; virInterfaceObjListFree; virInterfaceObjLock; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 6910681e23..d6f8e92152 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3657,33 +3657,16 @@ static int testConnectNumOfInterfaces(virConnectPtr conn) return ninterfaces; } -static int testConnectListInterfaces(virConnectPtr conn, char **const names, int nnames) +static int testConnectListInterfaces(virConnectPtr conn, char **const names, int maxnames) { testDriverPtr privconn = conn->privateData; - int n = 0; - size_t i; + int nnames; testDriverLock(privconn); - memset(names, 0, sizeof(*names)*nnames); - for (i = 0; (i < privconn->ifaces.count) && (n < nnames); i++) { - virInterfaceObjLock(privconn->ifaces.objs[i]); - if (virInterfaceObjIsActive(privconn->ifaces.objs[i])) { - if (VIR_STRDUP(names[n++], privconn->ifaces.objs[i]->def->name) < 0) { - virInterfaceObjUnlock(privconn->ifaces.objs[i]); - goto error; - } - } - virInterfaceObjUnlock(privconn->ifaces.objs[i]); - } + nnames = virInterfaceObjGetNames(&privconn->ifaces, true, names, maxnames); testDriverUnlock(privconn); - return n; - - error: - for (n = 0; n < nnames; n++) - VIR_FREE(names[n]); - testDriverUnlock(privconn); - return -1; + return nnames; } static int testConnectNumOfDefinedInterfaces(virConnectPtr conn) @@ -3697,33 +3680,16 @@ static int testConnectNumOfDefinedInterfaces(virConnectPtr conn) return ninterfaces; } -static int testConnectListDefinedInterfaces(virConnectPtr conn, char **const names, int nnames) +static int testConnectListDefinedInterfaces(virConnectPtr conn, char **const names, int maxnames) { testDriverPtr privconn = conn->privateData; - int n = 0; - size_t i; + int nnames; testDriverLock(privconn); - memset(names, 0, sizeof(*names)*nnames); - for (i = 0; (i < privconn->ifaces.count) && (n < nnames); i++) { - virInterfaceObjLock(privconn->ifaces.objs[i]); - if (!virInterfaceObjIsActive(privconn->ifaces.objs[i])) { - if (VIR_STRDUP(names[n++], privconn->ifaces.objs[i]->def->name) < 0) { - virInterfaceObjUnlock(privconn->ifaces.objs[i]); - goto error; - } - } - virInterfaceObjUnlock(privconn->ifaces.objs[i]); - } + nnames = virInterfaceObjGetNames(&privconn->ifaces, false, names, maxnames); testDriverUnlock(privconn); - return n; - - error: - for (n = 0; n < nnames; n++) - VIR_FREE(names[n]); - testDriverUnlock(privconn); - return -1; + return nnames; } static virInterfacePtr testInterfaceLookupByName(virConnectPtr conn,