[libvirt] [PATCH 2/4] conf: virDomainDeviceInfoCopy utility function

Michal Privoznik mprivozn at redhat.com
Fri Oct 12 13:58:50 UTC 2012


On 12.10.2012 11:58, Laine Stump wrote:
> This does a shallow copy of all the bits, then strdups the two items
> that are actually allocated separately.
> ---
>  src/conf/domain_conf.c   | 24 ++++++++++++++++++++++++
>  src/conf/domain_conf.h   |  2 ++
>  src/libvirt_private.syms |  1 +
>  3 files changed, 27 insertions(+)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 9bcd47b..629c0bf 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -2018,6 +2018,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 06bb96c..f6f4739 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -1885,6 +1885,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 50e2720..3bf1a08 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -328,6 +328,7 @@ virDomainDeviceAddressTypeToString;
>  virDomainDeviceDefCopy;
>  virDomainDeviceDefFree;
>  virDomainDeviceDefParse;
> +virDomainDeviceInfoCopy;
>  virDomainDeviceInfoIterate;
>  virDomainDeviceTypeToString;
>  virDomainDiskBusTypeToString;
> 

ACK

Michal




More information about the libvir-list mailing list