#include "virutil.h"
#include "virbuffer.h"
#include "virenum.h"
+#include "virbitmap.h"
#if WITH_YAJL
# include <yajl/yajl_gen.h>
case 'M':
case 'm': {
virBitmapPtr map = va_arg(args, virBitmapPtr);
- g_autoptr(virJSONValue) jsonMap = NULL;
+ g_autoptr(virJSONValue) jsonMap = virJSONValueNewArray();
+ ssize_t pos = -1;
if (!map) {
if (type == 'M')
return -1;
}
- if (!(jsonMap = virJSONValueNewArrayFromBitmap(map)))
- return -1;
+ while ((pos = virBitmapNextSetBit(map, pos)) > -1) {
+ g_autoptr(virJSONValue) newelem = virJSONValueNewNumberLong(pos);
+
+ if (virJSONValueArrayAppend(jsonMap, &newelem) < 0)
+ return -1;
+ }
if ((rc = virJSONValueObjectAppend(obj, key, &jsonMap)) < 0)
return -1;
}
-virJSONValuePtr
-virJSONValueNewArrayFromBitmap(virBitmapPtr bitmap)
-{
- g_autoptr(virJSONValue) ret = virJSONValueNewArray();
- ssize_t pos = -1;
-
- if (!bitmap)
- return g_steal_pointer(&ret);
-
- while ((pos = virBitmapNextSetBit(bitmap, pos)) > -1) {
- g_autoptr(virJSONValue) newelem = virJSONValueNewNumberLong(pos);
-
- if (virJSONValueArrayAppend(ret, &newelem) < 0)
- return NULL;
- }
-
- return g_steal_pointer(&ret);
-}
-
-
bool
virJSONValueIsNull(virJSONValuePtr val)
{
#pragma once
#include "internal.h"
-#include "virbitmap.h"
#include "virbuffer.h"
#include <stdarg.h>
virJSONValuePtr virJSONValueNewNull(void);
virJSONValuePtr virJSONValueNewArray(void);
virJSONValuePtr virJSONValueNewObject(void);
-virJSONValuePtr virJSONValueNewArrayFromBitmap(virBitmapPtr bitmap);
int virJSONValueObjectAppend(virJSONValuePtr object,
const char *key,