提交 baca0053 编写于 作者: M Martin Kletzander

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: NMartin Kletzander <mkletzan@redhat.com>
Reviewed-by: NJohn Ferlan <jferlan@redhat.com>
上级 449442c3
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册