diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-01-05 13:08:51 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-01-05 13:08:51 +0200 |
commit | 384b8c088c290f06f70835402f903627c67de6f3 (patch) | |
tree | 3a0659fed44bdb9f11f621e975ed02dff37f9731 /src | |
parent | 3b73967c62da68d865f32ca91c8407e65b8ddc03 (diff) | |
download | grecs-384b8c088c290f06f70835402f903627c67de6f3.tar.gz grecs-384b8c088c290f06f70835402f903627c67de6f3.tar.bz2 |
Implement json_array_set
Diffstat (limited to 'src')
-rw-r--r-- | src/json-gram.y | 18 | ||||
-rw-r--r-- | src/json.h | 1 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/json-gram.y b/src/json-gram.y index ecfb561..ab65362 100644 --- a/src/json-gram.y +++ b/src/json-gram.y @@ -485,7 +485,7 @@ json_array_insert(struct json_value *j, size_t idx, struct json_value *v) int json_array_append(struct json_value *j, struct json_value *v) { - if (j->type != json_arr) { + if (j->type != json_arr) { errno = EINVAL; return -1; } @@ -497,6 +497,22 @@ json_array_append(struct json_value *j, struct json_value *v) } int +json_array_set(struct json_value *j, size_t idx, struct json_value *v) +{ + if (j->type != json_arr) { + errno = EINVAL; + return -1; + } + if (idx >= json_array_size(j)) { + errno = ENOENT; + return -1; + } + json_array_flatten(j); + j->v.a->ov[idx] = v; + return 0; +} + +int json_array_get(struct json_value *j, size_t idx, struct json_value **retval) { if (j->type != json_arr) { @@ -93,6 +93,7 @@ size_t json_array_size(struct json_value *j); void json_array_flatten(struct json_value *j); int json_array_insert(struct json_value *j, size_t idx, struct json_value *v); int json_array_append(struct json_value *j, struct json_value *v); +int json_array_set(struct json_value *j, size_t idx, struct json_value *v); int json_array_get(struct json_value *j, size_t idx, struct json_value **retval); |