[libvirt] [PATCH 1/3] util: bitmap: Intoduce self-expanding bitmap APIs

John Ferlan jferlan at redhat.com
Tue Mar 29 15:12:38 UTC 2016


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




More information about the libvir-list mailing list