From: Laine Stump Date: Thu, 11 Oct 2012 05:09:00 +0000 (-0400) Subject: conf: virDomainDeviceInfoCopy utility function X-Git-Tag: v1.0.0-rc1~111 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=11c47d979c885dec0799463cd9325e91fc4e46cc;p=thirdparty%2Flibvirt.git conf: virDomainDeviceInfoCopy utility function This does a shallow copy of all the bits, then strdups the two items that are actually allocated separately. --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index cb80f09cc1..dd450b6463 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2011,6 +2011,30 @@ virDomainDeviceInfoIsSet(virDomainDeviceInfoPtr info, unsigned int flags) return false; } +int +virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst, + virDomainDeviceInfoPtr src) +{ + /* Assume that dst is already cleared */ + + /* first a shallow copy of *everything* */ + *dst = *src; + + /* then redo the two fields that are pointers */ + dst->alias = NULL; + dst->romfile = NULL; + + if (src->alias && !(dst->alias = strdup(src->alias))) { + virReportOOMError(); + return -1; + } + if (src->romfile && !(dst->romfile = strdup(src->romfile))) { + virReportOOMError(); + return -1; + } + return 0; +} + void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info) { VIR_FREE(info->alias); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 5ca1820fdd..1ee4b30e1c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1891,6 +1891,8 @@ virDomainDeviceDefPtr virDomainDeviceDefCopy(virCapsPtr caps, virDomainDeviceDefPtr src); int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info, int type); +int virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst, + virDomainDeviceInfoPtr src); void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info); void virDomainDefClearPCIAddresses(virDomainDefPtr def); void virDomainDefClearDeviceAliases(virDomainDefPtr def); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 6ea1308e3d..4028e5b14b 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -328,6 +328,7 @@ virDomainDeviceAddressTypeToString; virDomainDeviceDefCopy; virDomainDeviceDefFree; virDomainDeviceDefParse; +virDomainDeviceInfoCopy; virDomainDeviceInfoIterate; virDomainDeviceTypeToString; virDomainDiskBusTypeToString;