From 756b46ddd243c3293f7d8193916f0c048d8d6347 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 12 Jun 2014 15:26:18 +0200 Subject: [PATCH] storage: encryption: Add deep copy function for storage encryption --- src/util/virstorageencryption.c | 40 +++++++++++++++++++++++++++++++++ src/util/virstorageencryption.h | 3 +++ 2 files changed, 43 insertions(+) diff --git a/src/util/virstorageencryption.c b/src/util/virstorageencryption.c index 13064900c7..5a401b79b2 100644 --- a/src/util/virstorageencryption.c +++ b/src/util/virstorageencryption.c @@ -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) diff --git a/src/util/virstorageencryption.h b/src/util/virstorageencryption.h index f63c9eeb1a..04641b1dcd 100644 --- a/src/util/virstorageencryption.h +++ b/src/util/virstorageencryption.h @@ -61,6 +61,9 @@ struct _virStorageEncryption { virStorageEncryptionSecretPtr *secrets; }; +virStorageEncryptionPtr virStorageEncryptionCopy(const virStorageEncryption *src) + ATTRIBUTE_NONNULL(1); + void virStorageEncryptionFree(virStorageEncryptionPtr enc); virStorageEncryptionPtr virStorageEncryptionParseNode(xmlDocPtr xml, -- GitLab