Doh - I was looking at these while I see Michal posted an ACK series...
so hopefully before you push...
$SUBJ
Introduce
On 03/22/2016 10:00 AM, Peter Krempa wrote:
In some cases it's impractical to use the regular APIs as the
bitmap
size needs to be pre-declared. These new APIs allow to use bitmaps that
self expand.
The new code adds a property to the bitmap to track the alocation of
allocation
memory so that VIR_RESIZE_N can be used.
---
src/libvirt_private.syms | 3 ++
src/util/virbitmap.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++++
src/util/virbitmap.h | 8 +++++
tests/virbitmaptest.c | 51 ++++++++++++++++++++++++++
4 files changed, 155 insertions(+)
[...]
diff --git a/tests/virbitmaptest.c b/tests/virbitmaptest.c
index 967a5c8..92f1e6e 100644
--- a/tests/virbitmaptest.c
+++ b/tests/virbitmaptest.c
@@ -590,6 +590,54 @@ test11(const void *opaque)
return ret;
}
+#define TEST_MAP(sz, expect) \
+ do { \
+ char *actual = virBitmapFormat(map); \
+ if (virBitmapSize(map) != sz) { \
+ fprintf(stderr, "\n expected bitmap size: '%d' actual size:
" \
+ "'%zu'\n", sz, virBitmapSize(map));
\
According to Coverity, actual can be leaked here...
+ goto cleanup;
\
+ } \
+ if (STRNEQ_NULLABLE(expect, actual)) { \
+ fprintf(stderr, "\n expected bitmap contents '%s' actual
contents "\
+ "'%s'\n", NULLSTR(expect), NULLSTR(actual));
\
+ VIR_FREE(actual); \
+ goto cleanup; \
+ } \
+ VIR_FREE(actual); \
+ } while (0)
+
+/* test self-expanding bitmap APIs */
+static int
+test12(const void *opaque ATTRIBUTE_UNUSED)
+{
+ virBitmapPtr map = NULL;
+ int ret = -1;
+
+ if (!(map = virBitmapNewEmpty()))
+ return -1;
+
+ TEST_MAP(0, "");
+
+ if (virBitmapSetBitExpand(map, 100) < 0)
+ goto cleanup;
+
+ TEST_MAP(101, "100");
+
+ if (virBitmapClearBitExpand(map, 150) < 0)
+ goto cleanup;
+
+ TEST_MAP(151, "100");
+
+ ret = 0;
+
+ cleanup:
+ virBitmapFree(map);
+ return ret;
+}
+#undef TEST_MAP
+
+
John