Reviewed-by: Michal Privoznik <mpriv...@redhat.com>
Signed-off-by: Daniel P. Berrangé <berra...@redhat.com>
---
 src/libvirt_private.syms |  1 +
 src/util/viridentity.c   | 21 +++++++++++++++++++++
 src/util/viridentity.h   |  1 +
 3 files changed, 23 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 9c3c473c1c..443a78e698 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2411,6 +2411,7 @@ virIdentityGetUNIXUserID;
 virIdentityGetUserName;
 virIdentityGetX509DName;
 virIdentityNew;
+virIdentityNewCopy;
 virIdentitySetCurrent;
 virIdentitySetGroupName;
 virIdentitySetParameters;
diff --git a/src/util/viridentity.c b/src/util/viridentity.c
index e822f0bd74..01edabf2d7 100644
--- a/src/util/viridentity.c
+++ b/src/util/viridentity.c
@@ -333,6 +333,27 @@ virIdentity *virIdentityNew(void)
 }
 
 
+/**
+ * virIdentityNewCopy:
+ *
+ * Creates a new identity object that is a deep copy of an
+ * existing identity.
+ *
+ * Returns: a copy of the source identity
+ */
+virIdentity *virIdentityNewCopy(virIdentity *src)
+{
+    g_autoptr(virIdentity) ident = virIdentityNew();
+
+    if (virTypedParamsCopy(&ident->params, src->params, src->nparams) < 0)
+        return NULL;
+    ident->nparams = src->nparams;
+    ident->maxparams = src->nparams;
+
+    return g_steal_pointer(&ident);
+}
+
+
 static void virIdentityFinalize(GObject *object)
 {
     virIdentity *ident = VIR_IDENTITY(object);
diff --git a/src/util/viridentity.h b/src/util/viridentity.h
index 640a7ba2e4..512bca286d 100644
--- a/src/util/viridentity.h
+++ b/src/util/viridentity.h
@@ -33,6 +33,7 @@ int virIdentitySetCurrent(virIdentity *ident);
 virIdentity *virIdentityGetSystem(void);
 
 virIdentity *virIdentityNew(void);
+virIdentity *virIdentityNewCopy(virIdentity *src);
 
 int virIdentityGetUserName(virIdentity *ident,
                            const char **username);
-- 
2.31.1

Reply via email to