From 7d8afc47253eb626c2e0990041dd48648fd6d0d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Thu, 5 Jun 2014 11:23:28 +0200 Subject: [PATCH] Introduce virBitmapDataToString For converting bitmap data to human-readable strings. --- src/libvirt_private.syms | 1 + src/util/virbitmap.c | 25 +++++++++++++++++++++++++ src/util/virbitmap.h | 4 ++++ src/util/virstring.h | 1 - tests/virbitmaptest.c | 14 +++++++++++++- 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index d73a9f5100..f3dc39bb71 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -970,6 +970,7 @@ virBitmapClearAll; virBitmapClearBit; virBitmapCopy; virBitmapCountBits; +virBitmapDataToString; virBitmapEqual; virBitmapFormat; virBitmapFree; diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c index 8e7672682a..102963517f 100644 --- a/src/util/virbitmap.c +++ b/src/util/virbitmap.c @@ -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; +} diff --git a/src/util/virbitmap.h b/src/util/virbitmap.h index 6573aa26be..142a2181d7 100644 --- a/src/util/virbitmap.h +++ b/src/util/virbitmap.h @@ -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 diff --git a/src/util/virstring.h b/src/util/virstring.h index 0ab9d9633f..6ddcff549b 100644 --- a/src/util/virstring.h +++ b/src/util/virstring.h @@ -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__ */ diff --git a/tests/virbitmaptest.c b/tests/virbitmaptest.c index cc34216357..139b8e258c 100644 --- a/tests/virbitmaptest.c +++ b/tests/virbitmaptest.c @@ -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; -- GitLab