}
+int
+virNWFilterObjGetNames(virNWFilterObjListPtr nwfilters,
+ virConnectPtr conn,
+ virNWFilterObjListFilter aclfilter,
+ char **const names,
+ int maxnames)
+{
+ int nnames = 0;
+ size_t i;
+
+ for (i = 0; i < nwfilters->count && nnames < maxnames; i++) {
+ virNWFilterObjPtr obj = nwfilters->objs[i];
+ virNWFilterObjLock(obj);
+ if (!aclfilter || aclfilter(conn, obj->def)) {
+ if (VIR_STRDUP(names[nnames], obj->def->name) < 0) {
+ virNWFilterObjUnlock(obj);
+ goto failure;
+ }
+ nnames++;
+ }
+ virNWFilterObjUnlock(obj);
+ }
+
+ return nnames;
+
+ failure:
+ while (--nnames >= 0)
+ VIR_FREE(names[nnames]);
+
+ return -1;
+}
+
+
static virNWFilterObjPtr
virNWFilterObjLoadConfig(virNWFilterObjListPtr nwfilters,
const char *configDir,
virConnectPtr conn,
virNWFilterObjListFilter aclfilter);
+int
+virNWFilterObjGetNames(virNWFilterObjListPtr nwfilters,
+ virConnectPtr conn,
+ virNWFilterObjListFilter aclfilter,
+ char **const names,
+ int maxnames);
+
int
virNWFilterObjLoadAllConfigs(virNWFilterObjListPtr nwfilters,
const char *configDir);
virNWFilterObjAssignDef;
virNWFilterObjFindByName;
virNWFilterObjFindByUUID;
+virNWFilterObjGetNames;
virNWFilterObjListFree;
virNWFilterObjLoadAllConfigs;
virNWFilterObjLock;
static int
nwfilterConnectListNWFilters(virConnectPtr conn,
char **const names,
- int nnames)
+ int maxnames)
{
- int got = 0;
- size_t i;
+ int nnames;
if (virConnectListNWFiltersEnsureACL(conn) < 0)
return -1;
nwfilterDriverLock();
- for (i = 0; i < driver->nwfilters.count && got < nnames; i++) {
- virNWFilterObjPtr obj = driver->nwfilters.objs[i];
- virNWFilterObjLock(obj);
- if (virConnectListNWFiltersCheckACL(conn, obj->def)) {
- if (VIR_STRDUP(names[got], obj->def->name) < 0) {
- virNWFilterObjUnlock(obj);
- goto cleanup;
- }
- got++;
- }
- virNWFilterObjUnlock(obj);
- }
- nwfilterDriverUnlock();
- return got;
-
- cleanup:
+ nnames = virNWFilterObjGetNames(&driver->nwfilters, conn,
+ virConnectListNWFiltersCheckACL,
+ names, maxnames);
nwfilterDriverUnlock();
- for (i = 0; i < got; i++)
- VIR_FREE(names[i]);
- memset(names, 0, nnames * sizeof(*names));
- return -1;
+ return nnames;
}