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@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list