qemuCaps, check_yajl) < 0)
goto cleanup;
- strflags = virBitmapToString(qemuCaps->flags, true);
+ strflags = virBitmapToString(qemuCaps->flags, true, false);
VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags %s",
major, minor, micro, *version, NULLSTR(strflags));
VIR_FREE(strflags);
char *virQEMUCapsFlagsString(virQEMUCapsPtr qemuCaps)
{
- return virBitmapToString(qemuCaps->flags, true);
+ return virBitmapToString(qemuCaps->flags, true, false);
}
* virBitmapToString:
* @bitmap: Pointer to bitmap
* @prefix: Whether to prepend "0x"
+ * @trim: Whether to output only the minimum required characters
*
* Convert @bitmap to printable string.
*
*/
char *
virBitmapToString(virBitmapPtr bitmap,
- bool prefix)
+ bool prefix,
+ bool trim)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
size_t sz;
+ size_t len;
+ size_t diff;
+ char *ret = NULL;
if (prefix)
virBufferAddLit(&buf, "0x");
}
virBufferCheckError(&buf);
- return virBufferContentAndReset(&buf);
+ ret = virBufferContentAndReset(&buf);
+ if (!ret)
+ return NULL;
+
+ if (!trim)
+ return ret;
+
+ if (bitmap->max_bit != bitmap->map_len * VIR_BITMAP_BITS_PER_UNIT) {
+ char *tmp = ret;
+
+ if (prefix)
+ tmp += 2;
+
+ len = strlen(tmp);
+ sz = VIR_DIV_UP(bitmap->max_bit, 4);
+ diff = len - sz;
+
+ if (diff)
+ memmove(tmp, tmp + diff, sz + 1);
+ }
+
+ return ret;
}
/**
int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
-char *virBitmapToString(virBitmapPtr bitmap, bool prefix)
+char *virBitmapToString(virBitmapPtr bitmap, bool prefix, bool trim)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
char *virBitmapFormat(virBitmapPtr bitmap);