]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: json: Add helpers for manipulating json arrays
authorPeter Krempa <pkrempa@redhat.com>
Mon, 16 Jun 2014 13:48:11 +0000 (15:48 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 17 Jun 2014 06:51:41 +0000 (08:51 +0200)
Add a checker to determine whether a JSON object is an array and a
helper to steal objects from a JSON array.

src/util/virjson.c
src/util/virjson.h

index a5d8daa409a7d0de457906862b172144cf61e87c..ec83b2fe5fb28e9c877b34f849dde843c39ff7cd 100644 (file)
@@ -564,6 +564,13 @@ virJSONValueObjectGetValue(virJSONValuePtr object,
 }
 
 
+bool
+virJSONValueIsArray(virJSONValuePtr array)
+{
+    return array->type == VIR_JSON_TYPE_ARRAY;
+}
+
+
 int
 virJSONValueArraySize(virJSONValuePtr array)
 {
@@ -588,6 +595,28 @@ virJSONValueArrayGet(virJSONValuePtr array,
 }
 
 
+virJSONValuePtr
+virJSONValueArraySteal(virJSONValuePtr array,
+                       unsigned int element)
+{
+    virJSONValuePtr ret = NULL;
+
+    if (array->type != VIR_JSON_TYPE_ARRAY)
+        return NULL;
+
+    if (element >= array->data.array.nvalues)
+        return NULL;
+
+    ret = array->data.array.values[element];
+
+    VIR_DELETE_ELEMENT(array->data.array.values,
+                       element,
+                       array->data.array.nvalues);
+
+    return ret;
+}
+
+
 const char *
 virJSONValueGetString(virJSONValuePtr string)
 {
index db11396258081db59fd91653453d62ac6d494eb0..9487729525a5fff5b0f1c0ac1d503790699d2032 100644 (file)
@@ -97,8 +97,10 @@ int virJSONValueArrayAppend(virJSONValuePtr object, virJSONValuePtr value);
 int virJSONValueObjectHasKey(virJSONValuePtr object, const char *key);
 virJSONValuePtr virJSONValueObjectGet(virJSONValuePtr object, const char *key);
 
+bool virJSONValueIsArray(virJSONValuePtr array);
 int virJSONValueArraySize(virJSONValuePtr object);
 virJSONValuePtr virJSONValueArrayGet(virJSONValuePtr object, unsigned int element);
+virJSONValuePtr virJSONValueArraySteal(virJSONValuePtr object, unsigned int element);
 
 int virJSONValueObjectKeysNumber(virJSONValuePtr object);
 const char *virJSONValueObjectGetKey(virJSONValuePtr object, unsigned int n);