提交 d728689d 编写于 作者: J Ján Tomko

Introduce virBitmapParseSeparator

This will be used for the caller that needs to specify a separator.
Currently identical to virBitmapParse.

Also change one test case to use the new function.
上级 ba7c026d
...@@ -1207,6 +1207,7 @@ virBitmapNextClearBit; ...@@ -1207,6 +1207,7 @@ virBitmapNextClearBit;
virBitmapNextSetBit; virBitmapNextSetBit;
virBitmapOverlaps; virBitmapOverlaps;
virBitmapParse; virBitmapParse;
virBitmapParseSeparator;
virBitmapSetAll; virBitmapSetAll;
virBitmapSetBit; virBitmapSetBit;
virBitmapSetBitExpand; virBitmapSetBitExpand;
......
...@@ -400,7 +400,7 @@ char *virBitmapFormat(virBitmapPtr bitmap) ...@@ -400,7 +400,7 @@ char *virBitmapFormat(virBitmapPtr bitmap)
} }
/** /**
* virBitmapParse: * virBitmapParseSeparator:
* @str: points to a string representing a human-readable bitmap * @str: points to a string representing a human-readable bitmap
* @terminator: character separating the bitmap to parse * @terminator: character separating the bitmap to parse
* @bitmap: a bitmap created from @str * @bitmap: a bitmap created from @str
...@@ -422,10 +422,10 @@ char *virBitmapFormat(virBitmapPtr bitmap) ...@@ -422,10 +422,10 @@ char *virBitmapFormat(virBitmapPtr bitmap)
* Returns 0 on success, or -1 in case of error. * Returns 0 on success, or -1 in case of error.
*/ */
int int
virBitmapParse(const char *str, virBitmapParseSeparator(const char *str,
char terminator, char terminator,
virBitmapPtr *bitmap, virBitmapPtr *bitmap,
size_t bitmapSize) size_t bitmapSize)
{ {
bool neg = false; bool neg = false;
const char *cur = str; const char *cur = str;
...@@ -519,6 +519,37 @@ virBitmapParse(const char *str, ...@@ -519,6 +519,37 @@ virBitmapParse(const char *str,
return -1; return -1;
} }
/**
* 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: * virBitmapNewCopy:
* @src: the source bitmap. * @src: the source bitmap.
......
...@@ -90,6 +90,11 @@ int virBitmapParse(const char *str, ...@@ -90,6 +90,11 @@ int virBitmapParse(const char *str,
virBitmapPtr *bitmap, virBitmapPtr *bitmap,
size_t bitmapSize) size_t bitmapSize)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); 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); virBitmapPtr virBitmapNewCopy(virBitmapPtr src) ATTRIBUTE_NONNULL(1);
......
...@@ -1049,7 +1049,7 @@ sexpr_to_xend_topology(const struct sexpr *root, virCapsPtr caps) ...@@ -1049,7 +1049,7 @@ sexpr_to_xend_topology(const struct sexpr *root, virCapsPtr caps)
if (!(cpuset = virBitmapNew(numCpus))) if (!(cpuset = virBitmapNew(numCpus)))
goto error; goto error;
} else { } else {
if (virBitmapParse(cur, 'n', &cpuset, numCpus) < 0) if (virBitmapParseSeparator(cur, 'n', &cpuset, numCpus) < 0)
goto error; goto error;
nb_cpus = virBitmapCountBits(cpuset); nb_cpus = virBitmapCountBits(cpuset);
......
...@@ -526,7 +526,7 @@ test10(const void *opaque ATTRIBUTE_UNUSED) ...@@ -526,7 +526,7 @@ test10(const void *opaque ATTRIBUTE_UNUSED)
int ret = -1; int ret = -1;
virBitmapPtr b1 = NULL, b2 = NULL, b3 = NULL, b4 = NULL; 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 ||
virBitmapParse("4,9,10,16-19", 0, &b2, 20) < 0 || virBitmapParse("4,9,10,16-19", 0, &b2, 20) < 0 ||
virBitmapParse("15", 0, &b3, 20) < 0 || virBitmapParse("15", 0, &b3, 20) < 0 ||
virBitmapParse("0,^0", 0, &b4, 20) < 0) virBitmapParse("0,^0", 0, &b4, 20) < 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册