[libvirt] [PATCH 2/5] Introduce virBitmapParseSeparator

Martin Kletzander mkletzan at redhat.com
Fri Jun 17 15:19:27 UTC 2016


On Fri, Jun 17, 2016 at 03:33:40PM +0200, Ján Tomko wrote:
>This will be used for the caller that needs to specify a separator.
>Currently identical to virBitmapParse.
>---
> src/libvirt_private.syms |  1 +
> src/util/virbitmap.c     | 41 ++++++++++++++++++++++++++++++++++++-----
> src/util/virbitmap.h     |  5 +++++
> src/xen/xend_internal.c  |  2 +-
> tests/virbitmaptest.c    |  2 +-
> 5 files changed, 44 insertions(+), 7 deletions(-)
>
>diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
>index af30476..a88a3d1 100644
>--- a/src/libvirt_private.syms
>+++ b/src/libvirt_private.syms
>@@ -1206,6 +1206,7 @@ virBitmapNextClearBit;
> virBitmapNextSetBit;
> virBitmapOverlaps;
> virBitmapParse;
>+virBitmapParseSeparator;
> virBitmapSetAll;
> virBitmapSetBit;
> virBitmapSetBitExpand;
>diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c
>index 7e9f3fd..139e3ba 100644
>--- a/src/util/virbitmap.c
>+++ b/src/util/virbitmap.c
>@@ -400,7 +400,7 @@ char *virBitmapFormat(virBitmapPtr bitmap)
> }
>
> /**
>- * virBitmapParse:
>+ * virBitmapParseSeparator:
>  * @str: points to a string representing a human-readable bitmap
>  * @terminator: character separating the bitmap to parse
>  * @bitmap: a bitmap created from @str
>@@ -422,10 +422,10 @@ char *virBitmapFormat(virBitmapPtr bitmap)
>  * Returns 0 on success, or -1 in case of error.
>  */
> int
>-virBitmapParse(const char *str,
>-               char terminator,
>-               virBitmapPtr *bitmap,
>-               size_t bitmapSize)
>+virBitmapParseSeparator(const char *str,
>+                        char terminator,
>+                        virBitmapPtr *bitmap,
>+                        size_t bitmapSize)
> {
>     bool neg = false;
>     const char *cur = str;
>@@ -520,6 +520,37 @@ virBitmapParse(const char *str,
> }
>
> /**
>+ * virBitmapParse:
>+ * @str: points to a string representing a human-readable bitmap
>+ * @terminator: character separating the bitmap to parse
>+ * @bitmap: a bitmap created from @str
>+ * @bitmapSize: the upper limit of num of bits in created bitmap
>+ *
>+ * This function is the counterpart of virBitmapFormat. This function creates
>+ * a bitmap, in which bits are set according to the content of @str.
>+ *
>+ * @str is a comma separated string of fields N, which means a number of bit
>+ * to set, and ^N, which means to unset the bit, and N-M for ranges of bits
>+ * to set.
>+ *
>+ * To allow parsing of bitmaps within larger strings it is possible to set
>+ * a termination character in the argument @terminator. When the character
>+ * in @terminator is encountered in @str, the parsing of the bitmap stops.
>+ * Pass 0 as @terminator if it is not needed. Whitespace characters may not
>+ * be used as terminators.
>+ *
>+ * Returns 0 on success, or -1 in case of error.
>+ */
>+int
>+virBitmapParse(const char *str,
>+               char terminator,
>+               virBitmapPtr *bitmap,
>+               size_t bitmapSize)
>+{
>+    return virBitmapParseSeparator(str, terminator, bitmap, bitmapSize);
>+}
>+
>+/**
>  * virBitmapNewCopy:
>  * @src: the source bitmap.
>  *
>diff --git a/src/util/virbitmap.h b/src/util/virbitmap.h
>index 79f53dd..79922ea 100644
>--- a/src/util/virbitmap.h
>+++ b/src/util/virbitmap.h
>@@ -90,6 +90,11 @@ int virBitmapParse(const char *str,
>                    virBitmapPtr *bitmap,
>                    size_t bitmapSize)
>     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3);
>+int
>+virBitmapParseSeparator(const char *str,
>+                        char terminator,
>+                        virBitmapPtr *bitmap,
>+                        size_t bitmapSize);
>
> virBitmapPtr virBitmapNewCopy(virBitmapPtr src) ATTRIBUTE_NONNULL(1);
>
>diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
>index 21ccff9..605c3cd 100644
>--- a/src/xen/xend_internal.c
>+++ b/src/xen/xend_internal.c
>@@ -1049,7 +1049,7 @@ sexpr_to_xend_topology(const struct sexpr *root, virCapsPtr caps)
>             if (!(cpuset = virBitmapNew(numCpus)))
>                 goto error;
>         } else {
>-            if (virBitmapParse(cur, 'n', &cpuset, numCpus) < 0)
>+            if (virBitmapParseSeparator(cur, 'n', &cpuset, numCpus) < 0)
>                 goto error;
>
>             nb_cpus = virBitmapCountBits(cpuset);
>diff --git a/tests/virbitmaptest.c b/tests/virbitmaptest.c
>index 00369af..5fa13c2 100644
>--- a/tests/virbitmaptest.c
>+++ b/tests/virbitmaptest.c
>@@ -526,7 +526,7 @@ test10(const void *opaque ATTRIBUTE_UNUSED)
>     int ret = -1;
>     virBitmapPtr b1 = NULL, b2 = NULL, b3 = NULL, b4 = NULL;
>
>-    if (virBitmapParse("0-3,5-8,11-15", 0, &b1, 20) < 0 ||
>+    if (virBitmapParseSeparator("0-3,5-8,11-15f16", 'f', &b1, 20) < 0 ||

You are changing the zero here to 'f' on purpose?  If yes, please either
explain that in the commit message or create a separate patch for that
in case someone is looking for this in the future.

If this was a mistake or you will add another patch for it, then ACK
with this hunk removed.

>         virBitmapParse("4,9,10,16-19", 0, &b2, 20) < 0 ||
>         virBitmapParse("15", 0, &b3, 20) < 0 ||
>         virBitmapParse("0,^0", 0, &b4, 20) < 0)
>--
>2.7.3
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160617/e64bf324/attachment-0001.sig>


More information about the libvir-list mailing list