[libvirt] [PATCH RFC 2/8] qemu: add VirBitmapDup

Lee Schermerhorn lee.schermerhorn at hp.com
Sun Mar 11 18:44:57 UTC 2012


Add function to duplicate a virBitmap for returning
cached qemuCaps[Flags] from qemuCapsExtractVersionInfo

TODO:  could factor the size calculation into a macro or inline
function as it's used by both Dup and Alloc.

---
 src/libvirt_private.syms |    1 +
 src/util/bitmap.c        |   24 ++++++++++++++++++++++++
 src/util/bitmap.h        |    6 ++++++
 3 files changed, 31 insertions(+)

Index: libvirt-0.9.10/src/util/bitmap.c
===================================================================
--- libvirt-0.9.10.orig/src/util/bitmap.c
+++ libvirt-0.9.10/src/util/bitmap.c
@@ -80,6 +80,30 @@ virBitmapPtr virBitmapAlloc(size_t size)
 }
 
 /**
+ * virBitmapDup:
+ * @sbm: source bitmap to duplicate
+ *
+ * Duplicate the source bitmap.
+ *
+ * Returns a pointer to the duplicated bitmap or NULL if
+ * memory cannot be allocated.
+ */
+virBitmapPtr virBitmapDup(virBitmapPtr sbm)
+{
+    virBitmapPtr bitmap;
+
+    bitmap = virBitmapAlloc(sbm->size);
+    if (bitmap) {
+        size_t sz = (sbm->size + VIR_BITMAP_BITS_PER_UNIT - 1) /
+                         VIR_BITMAP_BITS_PER_UNIT;
+        int i;
+        for (i = 0; i < sz; ++i)
+            bitmap->map[i] = sbm->map[i];
+    }
+    return bitmap;
+}
+
+/**
  * virBitmapFree:
  * @bitmap: previously allocated bitmap
  *
Index: libvirt-0.9.10/src/util/bitmap.h
===================================================================
--- libvirt-0.9.10.orig/src/util/bitmap.h
+++ libvirt-0.9.10/src/util/bitmap.h
@@ -37,6 +37,12 @@ typedef virBitmap *virBitmapPtr;
 virBitmapPtr virBitmapAlloc(size_t size) ATTRIBUTE_RETURN_CHECK;
 
 /*
+ * Duplicate the specified virBitmap
+ */
+virBitmapPtr virBitmapDup(virBitmapPtr src)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
+
+/*
  * Free previously allocated bitmap
  */
 void virBitmapFree(virBitmapPtr bitmap);
Index: libvirt-0.9.10/src/libvirt_private.syms
===================================================================
--- libvirt-0.9.10.orig/src/libvirt_private.syms
+++ libvirt-0.9.10/src/libvirt_private.syms
@@ -13,6 +13,7 @@ virRequestUsername;
 # bitmap.h
 virBitmapAlloc;
 virBitmapClearBit;
+virBitmapDup;
 virBitmapFree;
 virBitmapGetBit;
 virBitmapSetBit;




More information about the libvir-list mailing list