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>
virBitmapSetAll;
virBitmapSetBit;
virBitmapSetBitExpand;
+virBitmapShrink;
virBitmapSize;
virBitmapSubtract;
virBitmapToData;
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;
+}
void virBitmapSubtract(virBitmapPtr a, virBitmapPtr b)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+void virBitmapShrink(virBitmapPtr map, size_t b);
+
#endif