+static struct json_object *addperm(struct json_object *o, struct json_object *x)
+{
+ struct json_object *a;
+
+ if (!o)
+ return x;
+
+ if (!json_object_object_get_ex(o, "allOf", &a)) {
+ a = json_object_new_array();
+ json_object_array_add(a, o);
+ o = json_object_new_object();
+ json_object_object_add(o, "allOf", a);
+ }
+ json_object_array_add(a, x);
+ return o;
+}
+
+static struct json_object *addperm_key_val(struct json_object *o, const char *key, struct json_object *val)
+{
+ struct json_object *x = json_object_new_object();
+ json_object_object_add(x, key, val);
+ return addperm(o, x);
+}
+
+static struct json_object *addperm_key_valstr(struct json_object *o, const char *key, const char *val)
+{
+ return addperm_key_val(o, key, json_object_new_string(val));
+}
+
+static struct json_object *addperm_key_valint(struct json_object *o, const char *key, int val)
+{
+ return addperm_key_val(o, key, json_object_new_int(val));
+}