mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 11:31:16 +00:00
util: Introduce virBitmapShrink
Sometimes the size of the bitmap matters and it might not be guessed correctly when parsing from some type of input. For example virBitmapNewData() has Byte granularity, virBitmapNewString() has nibble granularity and so on. virBitmapParseUnlimited() can be tricked into creating huge bitmap that's not needed (e.g.: "0-2,^99999999"). This function provides a way to shrink the bitmap. It is not supposed to free any memory. Signed-off-by: Martin Kletzander <mkletzan@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
449442c34d
commit
baca005367
@ -1375,6 +1375,7 @@ virBitmapParseUnlimited;
|
||||
virBitmapSetAll;
|
||||
virBitmapSetBit;
|
||||
virBitmapSetBitExpand;
|
||||
virBitmapShrink;
|
||||
virBitmapSize;
|
||||
virBitmapSubtract;
|
||||
virBitmapToData;
|
||||
|
@ -1196,3 +1196,26 @@ virBitmapSubtract(virBitmapPtr a,
|
||||
for (i = 0; i < max; i++)
|
||||
a->map[i] &= ~b->map[i];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virBitmapShrink:
|
||||
* @map: Pointer to bitmap
|
||||
* @b: last bit position to be excluded from bitmap
|
||||
*
|
||||
* Resizes the bitmap so that no more than @b bits will fit into it. Nothing
|
||||
* will change if the size is already smaller than @b.
|
||||
*
|
||||
* NB: Does not adjust the map->map_len so that a subsequent virBitmapExpand
|
||||
* doesn't necessarily need to reallocate.
|
||||
*/
|
||||
void
|
||||
virBitmapShrink(virBitmapPtr map,
|
||||
size_t b)
|
||||
{
|
||||
if (!map)
|
||||
return;
|
||||
|
||||
if (map->max_bit >= b)
|
||||
map->max_bit = b;
|
||||
}
|
||||
|
@ -153,4 +153,6 @@ void virBitmapIntersect(virBitmapPtr a, virBitmapPtr b)
|
||||
void virBitmapSubtract(virBitmapPtr a, virBitmapPtr b)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
||||
|
||||
void virBitmapShrink(virBitmapPtr map, size_t b);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user