]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: virDomainDeviceInfoCopy utility function
authorLaine Stump <laine@laine.org>
Thu, 11 Oct 2012 05:09:00 +0000 (01:09 -0400)
committerLaine Stump <laine@laine.org>
Mon, 15 Oct 2012 08:03:06 +0000 (04:03 -0400)
This does a shallow copy of all the bits, then strdups the two items
that are actually allocated separately.

src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms

index cb80f09cc1633a03534e643d56c1c72770ff34f7..dd450b64635f1b93f36245c8acb554e73104751f 100644 (file)
@@ -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);
index 5ca1820fdd83a641a3add07f1e5204529d43c0e4..1ee4b30e1cc6d7962fbe0c41cdd6434e03c16eb2 100644 (file)
@@ -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);
index 6ea1308e3dbb43ba26716c2377a7166d921d66b2..4028e5b14b4b95a7bc7fdf09b5c2a8fd74ccdc65 100644 (file)
@@ -328,6 +328,7 @@ virDomainDeviceAddressTypeToString;
 virDomainDeviceDefCopy;
 virDomainDeviceDefFree;
 virDomainDeviceDefParse;
+virDomainDeviceInfoCopy;
 virDomainDeviceInfoIterate;
 virDomainDeviceTypeToString;
 virDomainDiskBusTypeToString;