[libvirt] [PATCHv3 09/26] util: storagesource: Add helper to copy and free storage source seclabels

Peter Krempa pkrempa at redhat.com
Wed Jun 25 16:54:53 UTC 2014


They will be reused to transfer disk labels from snapshotted disks to
the new disk definitions.
---
 src/libvirt_private.syms  |  1 +
 src/util/virstoragefile.c | 45 ++++++++++++++++++++++++++++++++++++++-------
 src/util/virstoragefile.h |  3 +++
 3 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 1e1dd84..792754f 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1913,6 +1913,7 @@ virStorageSourceNewFromBacking;
 virStorageSourcePoolDefFree;
 virStorageSourcePoolModeTypeFromString;
 virStorageSourcePoolModeTypeToString;
+virStorageSourceSeclabelsCopy;
 virStorageTypeFromString;
 virStorageTypeToString;

diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 0c50de1..c52206c 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -1515,6 +1515,31 @@ virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
 }


+int
+virStorageSourceSeclabelsCopy(virStorageSourcePtr to,
+                              const virStorageSource *from)
+{
+    size_t i;
+
+    virStorageSourceSeclabelsClear(to);
+
+    if (VIR_ALLOC_N(to->seclabels, from->nseclabels) < 0)
+        return -1;
+    to->nseclabels = from->nseclabels;
+
+    for (i = 0; i < to->nseclabels; i++) {
+        if (!(to->seclabels[i] = virSecurityDeviceLabelDefCopy(from->seclabels[i])))
+            goto error;
+    }
+
+    return 0;
+
+ error:
+    virStorageSourceSeclabelsClear(to);
+    return -1;
+}
+
+
 void
 virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def)
 {
@@ -1573,10 +1598,21 @@ virStorageSourceBackingStoreClear(virStorageSourcePtr def)


 void
-virStorageSourceClear(virStorageSourcePtr def)
+virStorageSourceSeclabelsClear(virStorageSourcePtr def)
 {
     size_t i;

+    if (def->seclabels) {
+        for (i = 0; i < def->nseclabels; i++)
+            virSecurityDeviceLabelDefFree(def->seclabels[i]);
+        VIR_FREE(def->seclabels);
+    }
+}
+
+
+void
+virStorageSourceClear(virStorageSourcePtr def)
+{
     if (!def)
         return;

@@ -1587,12 +1623,7 @@ virStorageSourceClear(virStorageSourcePtr def)
     virBitmapFree(def->features);
     VIR_FREE(def->compat);
     virStorageEncryptionFree(def->encryption);
-
-    if (def->seclabels) {
-        for (i = 0; i < def->nseclabels; i++)
-            virSecurityDeviceLabelDefFree(def->seclabels[i]);
-        VIR_FREE(def->seclabels);
-    }
+    virStorageSourceSeclabelsClear(def);
     virStoragePermsFree(def->perms);
     VIR_FREE(def->timestamps);

diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index fe17b0b..176661e 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -322,6 +322,9 @@ void virStorageNetHostDefFree(size_t nhosts, virStorageNetHostDefPtr hosts);
 virStorageNetHostDefPtr virStorageNetHostDefCopy(size_t nhosts,
                                                  virStorageNetHostDefPtr hosts);

+void virStorageSourceSeclabelsClear(virStorageSourcePtr def);
+int virStorageSourceSeclabelsCopy(virStorageSourcePtr to,
+                                  const virStorageSource *from);
 void virStorageSourceAuthClear(virStorageSourcePtr def);
 void virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def);
 void virStorageSourceClear(virStorageSourcePtr def);
-- 
1.9.3




More information about the libvir-list mailing list