conf: Add functions to copy and free network disk source definitions

To simplify operations on virDomainDiskHostDef arrays we will need deep
copy and freeing functions. Add and properly export them.
This commit is contained in:
Peter Krempa 2013-11-15 16:34:07 +01:00
parent 5a66c667ff
commit ae361674ac
3 changed files with 57 additions and 3 deletions

View File

@ -1216,9 +1216,7 @@ void virDomainDiskDefFree(virDomainDiskDefPtr def)
VIR_FREE(def->seclabels);
}
for (i = 0; i < def->nhosts; i++)
virDomainDiskHostDefClear(&def->hosts[i]);
VIR_FREE(def->hosts);
virDomainDiskHostDefFree(def->nhosts, def->hosts);
VIR_FREE(def);
}
@ -1233,6 +1231,57 @@ void virDomainDiskHostDefClear(virDomainDiskHostDefPtr def)
VIR_FREE(def->socket);
}
void
virDomainDiskHostDefFree(size_t nhosts,
virDomainDiskHostDefPtr hosts)
{
size_t i;
if (!hosts)
return;
for (i = 0; i < nhosts; i++)
virDomainDiskHostDefClear(&hosts[i]);
VIR_FREE(hosts);
}
virDomainDiskHostDefPtr
virDomainDiskHostDefCopy(size_t nhosts,
virDomainDiskHostDefPtr hosts)
{
virDomainDiskHostDefPtr ret = NULL;
size_t i;
if (VIR_ALLOC_N(ret, nhosts) < 0)
goto error;
for (i = 0; i < nhosts; i++) {
virDomainDiskHostDefPtr src = &hosts[i];
virDomainDiskHostDefPtr dst = &ret[i];
dst->transport = src->transport;
if (VIR_STRDUP(dst->name, src->name) < 0)
goto error;
if (VIR_STRDUP(dst->port, src->port) < 0)
goto error;
if (VIR_STRDUP(dst->socket, src->socket) < 0)
goto error;
}
return ret;
error:
virDomainDiskHostDefFree(nhosts, ret);
return NULL;
}
void virDomainControllerDefFree(virDomainControllerDefPtr def)
{
if (!def)

View File

@ -2210,6 +2210,9 @@ void virDomainInputDefFree(virDomainInputDefPtr def);
void virDomainDiskDefFree(virDomainDiskDefPtr def);
void virDomainLeaseDefFree(virDomainLeaseDefPtr def);
void virDomainDiskHostDefClear(virDomainDiskHostDefPtr def);
void virDomainDiskHostDefFree(size_t nhosts, virDomainDiskHostDefPtr hosts);
virDomainDiskHostDefPtr virDomainDiskHostDefCopy(size_t nhosts,
virDomainDiskHostDefPtr hosts);
int virDomainDeviceFindControllerModel(virDomainDefPtr def,
virDomainDeviceInfoPtr info,
int controllerType);

View File

@ -198,6 +198,8 @@ virDomainDiskFindByBusAndDst;
virDomainDiskGeometryTransTypeFromString;
virDomainDiskGeometryTransTypeToString;
virDomainDiskHostDefClear;
virDomainDiskHostDefCopy;
virDomainDiskHostDefFree;
virDomainDiskIndexByName;
virDomainDiskInsert;
virDomainDiskInsertPreAlloced;