Optimize the virBitmap to array-of-char bitmap conversion by skipping
trailing zero bytes.
This also fixes a regression when requesting iothread information from a
live VM since after commit
825df8c3158cfaf5f398418471f10f4ff3c3515a the
bitmap returned from virProcessGetAffinity is too big to be formatted
properly via RPC. A user would get the following error:
error: Unable to get domain IOThreads information
error: Unable to encode message payload
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=
1238589
*/
int virBitmapToData(virBitmapPtr bitmap, unsigned char **data, int *dataLen)
{
- int len;
+ ssize_t len;
- len = (bitmap->max_bit + CHAR_BIT - 1) / CHAR_BIT;
+ if ((len = virBitmapLastSetBit(bitmap)) < 0)
+ len = 1;
+ else
+ len = (len + CHAR_BIT) / CHAR_BIT;
if (VIR_ALLOC_N(*data, len) < 0)
return -1;