From nobody Thu May 15 07:09:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1510563053265596.4058057677394; Mon, 13 Nov 2017 00:50:53 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BB5AE4DB12; Mon, 13 Nov 2017 08:50:51 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 971AF783B6; Mon, 13 Nov 2017 08:50:51 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 662CA1800BDE; Mon, 13 Nov 2017 08:50:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vAD8okiv016269 for ; Mon, 13 Nov 2017 03:50:46 -0500 Received: by smtp.corp.redhat.com (Postfix) id 067FD679D5; Mon, 13 Nov 2017 08:50:46 +0000 (UTC) Received: from caroline.localdomain (unknown [10.43.2.67]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A7333171C0 for ; Mon, 13 Nov 2017 08:50:45 +0000 (UTC) Received: from caroline.brq.redhat.com (caroline.brq.redhat.com [127.0.0.1]) by caroline.localdomain (Postfix) with ESMTP id 600C3123A7A for ; Mon, 13 Nov 2017 09:50:41 +0100 (CET) From: Martin Kletzander To: libvir-list@redhat.com Date: Mon, 13 Nov 2017 09:50:21 +0100 Message-Id: <796b2039399105a5e492f77ee2c6b3da9a5a972b.1510560300.git.mkletzan@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 06/21] util: Don't output too many zeros from virBitmapToString X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Mon, 13 Nov 2017 08:50:52 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Truncate the output so that it is only as big as is needed to fit all the bits, not all the units from the map. This will be needed in the future in order to properly format bitmaps for kernel's sysfs files. Signed-off-by: Martin Kletzander --- src/qemu/qemu_capabilities.c | 4 ++-- src/util/virbitmap.c | 29 +++++++++++++++++++++++++++-- src/util/virbitmap.h | 2 +- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 60ca8ee9ef84..232f88af0fb8 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1509,7 +1509,7 @@ int virQEMUCapsParseHelpStr(const char *qemu, qemuCaps, check_yajl) < 0) goto cleanup; =20 - strflags =3D virBitmapToString(qemuCaps->flags, true); + strflags =3D 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); @@ -2376,7 +2376,7 @@ virQEMUCapsClear(virQEMUCapsPtr qemuCaps, =20 char *virQEMUCapsFlagsString(virQEMUCapsPtr qemuCaps) { - return virBitmapToString(qemuCaps->flags, true); + return virBitmapToString(qemuCaps->flags, true, false); } =20 =20 diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c index 3d160aa4d50a..0a7d3452b90c 100644 --- a/src/util/virbitmap.c +++ b/src/util/virbitmap.c @@ -313,15 +313,19 @@ int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bo= ol *result) * virBitmapToString: * @bitmap: Pointer to bitmap * @prefix: Whether to prepend "0x" + * @trim: Whether to output only the minimum required characters * * Convert @bitmap to printable string. * * Returns pointer to the string or NULL on error. */ -char *virBitmapToString(virBitmapPtr bitmap, bool prefix) +char *virBitmapToString(virBitmapPtr bitmap, bool prefix, bool trim) { virBuffer buf =3D VIR_BUFFER_INITIALIZER; size_t sz; + size_t len; + size_t diff; + char *ret =3D NULL; =20 if (prefix) virBufferAddLit(&buf, "0x"); @@ -335,7 +339,28 @@ char *virBitmapToString(virBitmapPtr bitmap, bool pref= ix) } =20 virBufferCheckError(&buf); - return virBufferContentAndReset(&buf); + ret =3D virBufferContentAndReset(&buf); + if (!ret) + return NULL; + + if (!trim) + return ret; + + if (bitmap->max_bit !=3D bitmap->map_len * VIR_BITMAP_BITS_PER_UNIT) { + char *tmp =3D ret; + + if (prefix) + tmp +=3D 2; + + len =3D strlen(tmp); + sz =3D VIR_DIV_UP(bitmap->max_bit, 4); + diff =3D len - sz; + + if (diff) + memmove(tmp, tmp + diff, sz + 1); + } + + return ret; } =20 /** diff --git a/src/util/virbitmap.h b/src/util/virbitmap.h index 720b389cfe52..02acb7519d37 100644 --- a/src/util/virbitmap.h +++ b/src/util/virbitmap.h @@ -80,7 +80,7 @@ bool virBitmapIsBitSet(virBitmapPtr bitmap, size_t b) int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK; =20 -char *virBitmapToString(virBitmapPtr bitmap, bool prefix) +char *virBitmapToString(virBitmapPtr bitmap, bool prefix, bool trim) ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; =20 char *virBitmapFormat(virBitmapPtr bitmap); --=20 2.15.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list