]> xenbits.xensource.com Git - libvirt.git/commitdiff
Introduce virBitmapDataToString
authorJán Tomko <jtomko@redhat.com>
Thu, 5 Jun 2014 09:23:28 +0000 (11:23 +0200)
committerJán Tomko <jtomko@redhat.com>
Fri, 6 Jun 2014 12:35:19 +0000 (14:35 +0200)
For converting bitmap data to human-readable strings.

src/libvirt_private.syms
src/util/virbitmap.c
src/util/virbitmap.h
src/util/virstring.h
tests/virbitmaptest.c

index d73a9f51008ec9e46108a0a35b649d27810912e2..f3dc39bb7126aadfa3e8ca0746def4b4de16c25a 100644 (file)
@@ -970,6 +970,7 @@ virBitmapClearAll;
 virBitmapClearBit;
 virBitmapCopy;
 virBitmapCountBits;
+virBitmapDataToString;
 virBitmapEqual;
 virBitmapFormat;
 virBitmapFree;
index 8e7672682abde0eb9c8e63b7ff49ea467064d0c6..102963517f4972380d394799ebf5cdfcac3b995b 100644 (file)
@@ -707,3 +707,28 @@ virBitmapCountBits(virBitmapPtr bitmap)
 
     return ret;
 }
+
+/**
+ * virBitmapDataToString:
+ * @data: the data
+ * @len: length of @data in bytes
+ *
+ * Convert a chunk of data containing bits information to a human
+ * readable string, e.g.: 0-1,4
+ *
+ * Returns: a string representation of the data, or NULL on error
+ */
+char *
+virBitmapDataToString(void *data,
+                      int len)
+{
+    virBitmapPtr map = NULL;
+    char *ret = NULL;
+
+    if (!(map = virBitmapNewData(data, len)))
+        return NULL;
+
+    ret = virBitmapFormat(map);
+    virBitmapFree(map);
+    return ret;
+}
index 6573aa26becdcc530dc5f19856f91aaf6a99d1e8..142a2181d773dbf55ceda8257c63f51946f4d8ad 100644 (file)
@@ -111,4 +111,8 @@ ssize_t virBitmapNextClearBit(virBitmapPtr bitmap, ssize_t pos)
 size_t virBitmapCountBits(virBitmapPtr bitmap)
     ATTRIBUTE_NONNULL(1);
 
+char *virBitmapDataToString(void *data,
+                            int len)
+    ATTRIBUTE_NONNULL(1);
+
 #endif
index 0ab9d9633fcd69e2dc560ebe1e23e95fa945df8f..6ddcff549b91454f12db4164a1c46f70f3548365 100644 (file)
@@ -255,5 +255,4 @@ char *virStringReplace(const char *haystack,
                        const char *newneedle)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 
-
 #endif /* __VIR_STRING_H__ */
index cc342163579e4e2a81f0559edc176f760efb6084..139b8e258cb5e6f0d977fe264afcb87989172786 100644 (file)
@@ -266,7 +266,7 @@ test4(const void *data ATTRIBUTE_UNUSED)
     return -1;
 }
 
-/* test for virBitmapNewData/ToData */
+/* test for virBitmapNewData/ToData/DataToString */
 static int
 test5(const void *v ATTRIBUTE_UNUSED)
 {
@@ -278,6 +278,7 @@ test5(const void *v ATTRIBUTE_UNUSED)
     size_t i;
     ssize_t j;
     int ret = -1;
+    char *str = NULL;
 
     bitmap = virBitmapNewData(data, sizeof(data));
     if (!bitmap)
@@ -307,8 +308,19 @@ test5(const void *v ATTRIBUTE_UNUSED)
         data2[4] != 0x04)
         goto error;
 
+    if (!(str = virBitmapDataToString(data, sizeof(data))))
+        goto error;
+    if (STRNEQ(str, "0,9,34"))
+        goto error;
+    VIR_FREE(str);
+    if (!(str = virBitmapDataToString(data2, sizeof(data2))))
+        goto error;
+    if (STRNEQ(str, "0,2,9,15,34"))
+        goto error;
+
     ret = 0;
  error:
+    VIR_FREE(str);
     virBitmapFree(bitmap);
     VIR_FREE(data2);
     return ret;