]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: Add API for converting virBitmap into printable string
authorJiri Denemark <jdenemar@redhat.com>
Wed, 9 Feb 2011 12:14:51 +0000 (13:14 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 24 Feb 2011 11:03:04 +0000 (12:03 +0100)
src/libvirt_private.syms
src/util/bitmap.c
src/util/bitmap.h

index 797a6709f53dc31c3a7507b8037f789659a4a818..66917ca70abeec243e77b33ef846b702f45c650a 100644 (file)
@@ -16,6 +16,7 @@ virBitmapClearBit;
 virBitmapFree;
 virBitmapGetBit;
 virBitmapSetBit;
+virBitmapString;
 
 
 # buf.h
index 978ec9b6495dd76fc90ac956cddc67e900c24314..2edb2dba976c939af8749af72f8dde830a3a9733 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "bitmap.h"
 #include "memory.h"
+#include "buf.h"
 
 
 struct _virBitmap {
@@ -147,3 +148,35 @@ int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result)
     *result = !!(bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] & VIR_BITMAP_BIT(b));
     return 0;
 }
+
+/**
+ * virBitmapString:
+ * @bitmap: Pointer to bitmap
+ *
+ * Convert @bitmap to printable string.
+ *
+ * Returns pointer to the string or NULL on error.
+ */
+char *virBitmapString(virBitmapPtr bitmap)
+{
+    virBuffer buf = VIR_BUFFER_INITIALIZER;
+    size_t sz;
+
+    virBufferAddLit(&buf, "0x");
+
+    sz = (bitmap->size + VIR_BITMAP_BITS_PER_UNIT - 1) /
+          VIR_BITMAP_BITS_PER_UNIT;
+
+    while (sz--) {
+        virBufferVSprintf(&buf, "%0*lx",
+                          VIR_BITMAP_BITS_PER_UNIT / 4,
+                          bitmap->map[sz]);
+    }
+
+    if (virBufferError(&buf)) {
+        virBufferFreeAndReset(&buf);
+        return NULL;
+    }
+
+    return virBufferContentAndReset(&buf);
+}
index 08515d10ae59fe49d1735f31e90435e2b7f0faa3..db297b6dd012d137515d05ace5f91b846cb73496 100644 (file)
@@ -60,4 +60,7 @@ int virBitmapClearBit(virBitmapPtr bitmap, size_t b)
 int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
 
+char *virBitmapString(virBitmapPtr bitmap)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
+
 #endif