Introduce virBitmapDataToString

For converting bitmap data to human-readable strings.
This commit is contained in:
Ján Tomko 2014-06-05 11:23:28 +02:00
parent d4edce5f1e
commit 7d8afc4725
5 changed files with 43 additions and 2 deletions

View File

@ -970,6 +970,7 @@ virBitmapClearAll;
virBitmapClearBit;
virBitmapCopy;
virBitmapCountBits;
virBitmapDataToString;
virBitmapEqual;
virBitmapFormat;
virBitmapFree;

View File

@ -707,3 +707,28 @@ virBitmapCountBits(virBitmapPtr bitmap)
return ret;
}
/**
* virBitmapDataToString:
* @data: the data
* @len: length of @data in bytes
*
* Convert a chunk of data containing bits information to a human
* readable string, e.g.: 0-1,4
*
* Returns: a string representation of the data, or NULL on error
*/
char *
virBitmapDataToString(void *data,
int len)
{
virBitmapPtr map = NULL;
char *ret = NULL;
if (!(map = virBitmapNewData(data, len)))
return NULL;
ret = virBitmapFormat(map);
virBitmapFree(map);
return ret;
}

View File

@ -111,4 +111,8 @@ ssize_t virBitmapNextClearBit(virBitmapPtr bitmap, ssize_t pos)
size_t virBitmapCountBits(virBitmapPtr bitmap)
ATTRIBUTE_NONNULL(1);
char *virBitmapDataToString(void *data,
int len)
ATTRIBUTE_NONNULL(1);
#endif

View File

@ -255,5 +255,4 @@ char *virStringReplace(const char *haystack,
const char *newneedle)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
#endif /* __VIR_STRING_H__ */

View File

@ -266,7 +266,7 @@ test4(const void *data ATTRIBUTE_UNUSED)
return -1;
}
/* test for virBitmapNewData/ToData */
/* test for virBitmapNewData/ToData/DataToString */
static int
test5(const void *v ATTRIBUTE_UNUSED)
{
@ -278,6 +278,7 @@ test5(const void *v ATTRIBUTE_UNUSED)
size_t i;
ssize_t j;
int ret = -1;
char *str = NULL;
bitmap = virBitmapNewData(data, sizeof(data));
if (!bitmap)
@ -307,8 +308,19 @@ test5(const void *v ATTRIBUTE_UNUSED)
data2[4] != 0x04)
goto error;
if (!(str = virBitmapDataToString(data, sizeof(data))))
goto error;
if (STRNEQ(str, "0,9,34"))
goto error;
VIR_FREE(str);
if (!(str = virBitmapDataToString(data2, sizeof(data2))))
goto error;
if (STRNEQ(str, "0,2,9,15,34"))
goto error;
ret = 0;
error:
VIR_FREE(str);
virBitmapFree(bitmap);
VIR_FREE(data2);
return ret;