[package] add jansson package
Signed-off-by: Roman Yeryomin <roman@advem.lv> git-svn-id: svn://svn.openwrt.org/openwrt/packages@28233 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
@ -0,0 +1,50 @@
|
||||
This patch adds a function which can be used to update
|
||||
json key values on all levels, not just one, automagically
|
||||
adding new keys to objects which do not exist in old object.
|
||||
|
||||
Signed-off-by: Roman Yeryomin <roman@advem.lv>
|
||||
|
||||
--- a/src/value.c 2011-04-21 13:15:58.000000000 +0300
|
||||
+++ b/src/value.c 2011-07-01 00:23:05.105103308 +0300
|
||||
@@ -215,6 +215,41 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int json_object_deep_update(json_t *object, json_t *other)
|
||||
+{
|
||||
+ void *iter;
|
||||
+
|
||||
+ if(!json_is_object(object) || !json_is_object(other))
|
||||
+ return -1;
|
||||
+
|
||||
+ iter = json_object_iter(other);
|
||||
+ while(iter) {
|
||||
+ const char *key;
|
||||
+ json_t *value;
|
||||
+
|
||||
+ key = json_object_iter_key(iter);
|
||||
+ value = json_object_iter_value(iter);
|
||||
+
|
||||
+ if (!json_is_object(value)) {
|
||||
+ if ( json_object_set_nocheck( object, key, value ) )
|
||||
+ return -1;
|
||||
+ } else {
|
||||
+ json_t *subobj = json_object_get(object, key);
|
||||
+ if (!subobj) {
|
||||
+ json_object_set_nocheck( object, key, value );
|
||||
+ iter = json_object_iter_next(other, iter);
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (json_object_deep_update( subobj, value ) == -1)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ iter = json_object_iter_next(other, iter);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
void *json_object_iter(json_t *json)
|
||||
{
|
||||
json_object_t *object;
|
Reference in New Issue
Block a user