]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: encryption: Add deep copy function for storage encryption
authorPeter Krempa <pkrempa@redhat.com>
Thu, 12 Jun 2014 13:26:18 +0000 (15:26 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 20 Jun 2014 07:14:46 +0000 (09:14 +0200)
src/util/virstorageencryption.c
src/util/virstorageencryption.h

index 13064900c77a4065fde01df631f298cd58c22f68..5a401b79b27b478f10574afea7b1a86662eb3405 100644 (file)
@@ -66,6 +66,46 @@ virStorageEncryptionFree(virStorageEncryptionPtr enc)
     VIR_FREE(enc);
 }
 
+static virStorageEncryptionSecretPtr
+virStorageEncryptionSecretCopy(const virStorageEncryptionSecret *src)
+{
+    virStorageEncryptionSecretPtr ret;
+
+    if (VIR_ALLOC(ret) < 0)
+        return NULL;
+
+    memcpy(ret, src, sizeof(*src));
+
+    return ret;
+}
+
+virStorageEncryptionPtr
+virStorageEncryptionCopy(const virStorageEncryption *src)
+{
+    virStorageEncryptionPtr ret;
+    size_t i;
+
+    if (VIR_ALLOC(ret) < 0)
+        return NULL;
+
+    if (VIR_ALLOC_N(ret->secrets, src->nsecrets) < 0)
+        goto error;
+
+    ret->nsecrets = src->nsecrets;
+    ret->format = src->format;
+
+    for (i = 0; i < src->nsecrets; i++) {
+        if (!(ret->secrets[i] = virStorageEncryptionSecretCopy(src->secrets[i])))
+            goto error;
+    }
+
+    return ret;
+
+ error:
+    virStorageEncryptionFree(ret);
+    return NULL;
+}
+
 static virStorageEncryptionSecretPtr
 virStorageEncryptionSecretParse(xmlXPathContextPtr ctxt,
                                 xmlNodePtr node)
index f63c9eeb1a0599413ff0e009984fb9c663c39ac7..04641b1dcd636a7c069ab532177dd50a9e832b8b 100644 (file)
@@ -61,6 +61,9 @@ struct _virStorageEncryption {
     virStorageEncryptionSecretPtr *secrets;
 };
 
+virStorageEncryptionPtr virStorageEncryptionCopy(const virStorageEncryption *src)
+    ATTRIBUTE_NONNULL(1);
+
 void virStorageEncryptionFree(virStorageEncryptionPtr enc);
 
 virStorageEncryptionPtr virStorageEncryptionParseNode(xmlDocPtr xml,