diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/json_util.c | 16 | ||||
-rw-r--r-- | lib/json_util.h | 11 |
2 files changed, 22 insertions, 5 deletions
diff --git a/lib/json_util.c b/lib/json_util.c index 67cde749..43e687e3 100644 --- a/lib/json_util.c +++ b/lib/json_util.c @@ -26,7 +26,7 @@ #include "json_util.h" -json_value *json_o_get( json_value *obj, json_char *name ) +json_value *json_o_get( const json_value *obj, const json_char *name ) { int i; @@ -40,12 +40,22 @@ json_value *json_o_get( json_value *obj, json_char *name ) return NULL; } -const char *json_o_str( json_value *obj, json_char *name ) +const char *json_o_str( const json_value *obj, const json_char *name ) { json_value *ret = json_o_get( obj, name ); - if( ret ) + if( ret && ret->type == json_string ) return ret->u.string.ptr; else return NULL; } + +char *json_o_strdup( const json_value *obj, const json_char *name ) +{ + json_value *ret = json_o_get( obj, name ); + + if( ret && ret->type == json_string && ret->u.string.ptr ) + return g_memdup( ret->u.string.ptr, ret->u.string.length + 1 ); + else + return NULL; +} diff --git a/lib/json_util.h b/lib/json_util.h index c4e52eeb..fa4510bb 100644 --- a/lib/json_util.h +++ b/lib/json_util.h @@ -23,5 +23,12 @@ #include "json.h" -json_value *json_o_get( json_value *obj, json_char *name ); -const char *json_o_str( json_value *obj, json_char *name ); +#define JSON_O_FOREACH(o, k, v) \ + char *k; json_value *v; int __i; \ + for( __i = 0; k = (o)->u.object.values[__i].name, \ + v = (o)->u.object.values[__i].value, \ + __i < (o)->u.object.length; __i ++ ) + +json_value *json_o_get( const json_value *obj, const json_char *name ); +const char *json_o_str( const json_value *obj, const json_char *name ); +char *json_o_strdup( const json_value *obj, const json_char *name ); |