A helper that never returns an error and treats bits out of bitmap range
as false.
Use it everywhere we use ignore_value on virBitmapGetBit, or loop over
the bitmap size.
---
src/conf/domain_conf.c | 4 +---
src/conf/node_device_conf.c | 4 +---
src/conf/snapshot_conf.c | 6 ++----
src/conf/storage_conf.c | 4 +---
src/libvirt_private.syms | 1 +
src/libxl/libxl_domain.c | 4 +---
src/libxl/libxl_driver.c | 5 +----
src/nodeinfo.c | 6 +-----
src/qemu/qemu_capabilities.c | 7 +------
src/storage/storage_backend.c | 4 +---
src/util/virbitmap.c | 18 ++++++++++++++++++
src/util/virbitmap.h | 5 +++++
src/util/vircgroup.c | 4 +---
src/util/virdnsmasq.c | 6 +-----
src/util/virportallocator.c | 17 +++--------------
src/util/virprocess.c | 9 ++-------
src/xen/xen_driver.c | 4 +---
src/xen/xend_internal.c | 5 +----
18 files changed, 43 insertions(+), 70 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 127fc91..ae8688e 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -3107,7 +3107,6 @@ virDomainDefRejectDuplicateControllers(virDomainDefPtr def)
virDomainControllerDefPtr cont;
size_t nbitmaps = 0;
int ret = -1;
- bool b;
size_t i;
memset(max_idx, -1, sizeof(max_idx));
@@ -3133,8 +3132,7 @@ virDomainDefRejectDuplicateControllers(virDomainDefPtr def)
if (max_idx[cont->type] == -1)
continue;
- ignore_value(virBitmapGetBit(bitmaps[cont->type], cont->idx, &b));
- if (b) {
+ if (virBitmapIsBitSet(bitmaps[cont->type], cont->idx)) {
virReportError(VIR_ERR_XML_ERROR,
_("Multiple '%s' controllers with index
'%d'"),
virDomainControllerTypeToString(cont->type),
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
index f9c9b6f..2899a06 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -439,9 +439,7 @@ char *virNodeDeviceDefFormat(const virNodeDeviceDef *def)
virInterfaceLinkFormat(&buf, &data->net.lnk);
if (data->net.features) {
for (i = 0; i < VIR_NET_DEV_FEAT_LAST; i++) {
- bool b;
- ignore_value(virBitmapGetBit(data->net.features, i, &b));
- if (b) {
+ if (virBitmapIsBitSet(data->net.features, i)) {
virBufferAsprintf(&buf, "<feature
name='%s'/>\n",
virNetDevFeatureTypeToString(i));
}
diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
index a0667c2..dc5436f 100644
--- a/src/conf/snapshot_conf.c
+++ b/src/conf/snapshot_conf.c
@@ -465,7 +465,6 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
virBitmapPtr map = NULL;
size_t i;
int ndisks;
- bool inuse;
if (!def->dom) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -500,7 +499,7 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
goto cleanup;
}
- if (virBitmapGetBit(map, idx, &inuse) < 0 || inuse) {
+ if (virBitmapIsBitSet(map, idx)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("disk '%s' specified twice"),
disk->name);
@@ -553,8 +552,7 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr def,
for (i = 0; i < def->dom->ndisks; i++) {
virDomainSnapshotDiskDefPtr disk;
- ignore_value(virBitmapGetBit(map, i, &inuse));
- if (inuse)
+ if (virBitmapIsBitSet(map, i))
continue;
disk = &def->disks[ndisks++];
if (VIR_ALLOC(disk->src) < 0)
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 4c1f05d..b070448 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -1567,7 +1567,6 @@ virStorageVolTargetDefFormat(virStorageVolOptionsPtr options,
if (options->featureToString && def->features) {
size_t i;
- bool b;
bool empty = virBitmapIsAllClear(def->features);
if (empty) {
@@ -1578,8 +1577,7 @@ virStorageVolTargetDefFormat(virStorageVolOptionsPtr options,
}
for (i = 0; i < VIR_STORAGE_FILE_FEATURE_LAST; i++) {
- ignore_value(virBitmapGetBit(def->features, i, &b));
- if (b)
+ if (virBitmapIsBitSet(def->features, i))
virBufferAsprintf(buf, "<%s/>\n",
options->featureToString(i));
}
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 7262c95..b5fe88c 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1070,6 +1070,7 @@ virBitmapFree;
virBitmapGetBit;
virBitmapIsAllClear;
virBitmapIsAllSet;
+virBitmapIsBitSet;
virBitmapLastSetBit;
virBitmapNew;
virBitmapNewCopy;
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 9af5758..66ca988 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -1093,9 +1093,7 @@ libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver,
virDomainObjPtr vm)
cpumask = def->cputune.vcpupin[vcpu]->cpumask;
for (i = 0; i < virBitmapSize(cpumask); ++i) {
- bool bit;
- ignore_value(virBitmapGetBit(cpumask, i, &bit));
- if (bit)
+ if (virBitmapIsBitSet(cpumask, i))
VIR_USE_CPU(cpumap, i);
}
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 88fa6ff..d4a8b9d 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -2051,7 +2051,6 @@ libxlDomainGetVcpuPinInfo(virDomainPtr dom, int ncpumaps,
virBitmapPtr cpumask = NULL;
int maxcpu, hostcpus, vcpu, pcpu, n, ret = -1;
unsigned char *cpumap;
- bool pinned;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1);
@@ -2100,9 +2099,7 @@ libxlDomainGetVcpuPinInfo(virDomainPtr dom, int ncpumaps,
cpumask = vcpupin_list[n]->cpumask;
cpumap = VIR_GET_CPUMAP(cpumaps, maplen, vcpu);
for (pcpu = 0; pcpu < maxcpu; pcpu++) {
- if (virBitmapGetBit(cpumask, pcpu, &pinned) < 0)
- goto cleanup;
- if (!pinned)
+ if (!virBitmapIsBitSet(cpumask, pcpu))
VIR_UNUSE_CPU(cpumap, pcpu);
}
}
diff --git a/src/nodeinfo.c b/src/nodeinfo.c
index 3a27c22..05256cc 100644
--- a/src/nodeinfo.c
+++ b/src/nodeinfo.c
@@ -1911,11 +1911,7 @@ nodeCapsInitNUMA(virCapsPtr caps)
cpu = 0;
for (i = 0; i < virBitmapSize(cpumap); i++) {
- bool cpustate;
- if (virBitmapGetBit(cpumap, i, &cpustate) < 0)
- continue;
-
- if (cpustate) {
+ if (virBitmapIsBitSet(cpumap, i)) {
if (virNodeCapsFillCPUInfo(i, cpus + cpu++) < 0) {
topology_failed = true;
virResetLastError();
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index c513d46..ccf22f0 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2048,12 +2048,7 @@ bool
virQEMUCapsGet(virQEMUCapsPtr qemuCaps,
virQEMUCapsFlags flag)
{
- bool b;
-
- if (!qemuCaps || virBitmapGetBit(qemuCaps->flags, flag, &b) < 0)
- return false;
- else
- return b;
+ return qemuCaps && virBitmapIsBitSet(qemuCaps->flags, flag);
}
diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
index a4e75f5a5..9322571 100644
--- a/src/storage/storage_backend.c
+++ b/src/storage/storage_backend.c
@@ -807,7 +807,6 @@ virStorageBackendCreateQemuImgOpts(char **opts,
virBitmapPtr features)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- bool b;
size_t i;
if (backingType)
@@ -823,8 +822,7 @@ virStorageBackendCreateQemuImgOpts(char **opts,
virBufferAsprintf(&buf, "compat=%s,", compat);
if (features && format == VIR_STORAGE_FILE_QCOW2) {
for (i = 0; i < VIR_STORAGE_FILE_FEATURE_LAST; i++) {
- ignore_value(virBitmapGetBit(features, i, &b));
- if (b) {
+ if (virBitmapIsBitSet(features, i)) {
switch ((virStorageFileFeature) i) {
case VIR_STORAGE_FILE_FEATURE_LAZY_REFCOUNTS:
if (STREQ_NULLABLE(compat, "0.10")) {
diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c
index b531be5..5322bce 100644
--- a/src/util/virbitmap.c
+++ b/src/util/virbitmap.c
@@ -179,6 +179,24 @@ static bool virBitmapIsSet(virBitmapPtr bitmap, size_t b)
}
/**
+ * virBitmapIsBitSet:
+ * @bitmap: Pointer to bitmap
+ * @b: bit position to get
+ *
+ * Get setting of bit position @b in @bitmap.
+ *
+ * If @b is in the range of @bitmap, returns the value of the bit.
+ * Otherwise false is returned.
+ */
+bool virBitmapIsBitSet(virBitmapPtr bitmap, size_t b)
+{
+ if (bitmap->max_bit <= b)
+ return false;
+
+ return virBitmapIsSet(bitmap, b);
+}
+
+/**
* virBitmapGetBit:
* @bitmap: Pointer to bitmap
* @b: bit position to get
diff --git a/src/util/virbitmap.h b/src/util/virbitmap.h
index 136e819..d326c6a 100644
--- a/src/util/virbitmap.h
+++ b/src/util/virbitmap.h
@@ -62,6 +62,11 @@ int virBitmapClearBit(virBitmapPtr bitmap, size_t b)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
/*
+ * Get bit @b in @bitmap. Returns false if b is out of range.
+ */
+bool virBitmapIsBitSet(virBitmapPtr bitmap, size_t b)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
+/*
* Get setting of bit position @b in @bitmap and store in @result
*/
int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result)
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 6957e81..e54a079 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -3085,9 +3085,7 @@ virCgroupGetPercpuStats(virCgroupPtr group,
need_cpus = MIN(total_cpus, start_cpu + ncpus);
for (i = 0; i < need_cpus; i++) {
- bool present;
- ignore_value(virBitmapGetBit(cpumap, i, &present));
- if (!present) {
+ if (!virBitmapIsBitSet(cpumap, i)) {
cpu_time = 0;
} else if (virStrToLong_ull(pos, &pos, 10, &cpu_time) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
diff --git a/src/util/virdnsmasq.c b/src/util/virdnsmasq.c
index 97652c0..6a2a2fb 100644
--- a/src/util/virdnsmasq.c
+++ b/src/util/virdnsmasq.c
@@ -874,10 +874,6 @@ dnsmasqCapsGetVersion(dnsmasqCapsPtr caps)
bool
dnsmasqCapsGet(dnsmasqCapsPtr caps, dnsmasqCapsFlags flag)
{
- bool b;
- if (!caps || virBitmapGetBit(caps->flags, flag, &b) < 0)
- return false;
- else
- return b;
+ return caps && virBitmapIsBitSet(caps->flags, flag);
}
diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c
index 578debf..fcd4f74 100644
--- a/src/util/virportallocator.c
+++ b/src/util/virportallocator.c
@@ -184,14 +184,7 @@ int virPortAllocatorAcquire(virPortAllocatorPtr pa,
for (i = pa->start; i <= pa->end && !*port; i++) {
bool used = false, v6used = false;
- if (virBitmapGetBit(pa->bitmap,
- i - pa->start, &used) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Failed to query port %zu"), i);
- goto cleanup;
- }
-
- if (used)
+ if (virBitmapIsBitSet(pa->bitmap, i - pa->start))
continue;
if (!(pa->flags & VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK)) {
@@ -269,12 +262,8 @@ int virPortAllocatorSetUsed(virPortAllocatorPtr pa,
}
if (value) {
- bool used = false;
- if (virBitmapGetBit(pa->bitmap, port - pa->start, &used) < 0)
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Failed to query port %d"), port);
-
- if (used || virBitmapSetBit(pa->bitmap, port - pa->start) < 0) {
+ if (virBitmapIsBitSet(pa->bitmap, port - pa->start) ||
+ virBitmapSetBit(pa->bitmap, port - pa->start) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Failed to reserve port %d"), port);
goto cleanup;
diff --git a/src/util/virprocess.c b/src/util/virprocess.c
index 342bf40..aa00a99 100644
--- a/src/util/virprocess.c
+++ b/src/util/virprocess.c
@@ -407,7 +407,6 @@ virProcessKillPainfully(pid_t pid, bool force)
int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
{
size_t i;
- bool set = false;
VIR_DEBUG("Set process affinity on %lld\n", (long long)pid);
# ifdef CPU_ALLOC
/* New method dynamically allocates cpu mask, allowing unlimted cpus */
@@ -433,9 +432,7 @@ int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
CPU_ZERO_S(masklen, mask);
for (i = 0; i < virBitmapSize(map); i++) {
- if (virBitmapGetBit(map, i, &set) < 0)
- return -1;
- if (set)
+ if (virBitmapIsBitSet(map, i))
CPU_SET_S(i, masklen, mask);
}
@@ -457,9 +454,7 @@ int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
CPU_ZERO(&mask);
for (i = 0; i < virBitmapSize(map); i++) {
- if (virBitmapGetBit(map, i, &set) < 0)
- return -1;
- if (set)
+ if (virBitmapIsBitSet(map, i))
CPU_SET(i, &mask);
}
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 5e6ef68..7577881 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -232,9 +232,7 @@ xenDomainUsedCpus(virDomainPtr dom, virDomainDefPtr def)
cpumap, cpumaplen)) >= 0) {
for (n = 0; n < ncpus; n++) {
for (m = 0; m < priv->nbNodeCpus; m++) {
- bool used;
- ignore_value(virBitmapGetBit(cpulist, m, &used));
- if ((!used) &&
+ if (!virBitmapIsBitSet(cpulist, m) &&
(VIR_CPU_USABLE(cpumap, cpumaplen, n, m))) {
ignore_value(virBitmapSetBit(cpulist, m));
nb++;
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index ab03c1c..1722c3f 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -1089,10 +1089,7 @@ sexpr_to_xend_topology(const struct sexpr *root, virCapsPtr caps)
}
for (n = 0, cpu = 0; cpu < numCpus; cpu++) {
- bool used;
-
- ignore_value(virBitmapGetBit(cpuset, cpu, &used));
- if (used)
+ if (virBitmapIsBitSet(cpuset, cpu))
cpuInfo[n++].id = cpu;
}
virBitmapFree(cpuset);
--
2.0.5