summaryrefslogtreecommitdiffabout
authorSergey Poznyakoff <gray@gnu.org.ua>2016-01-05 11:08:51 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2016-01-05 11:08:51 (GMT)
commit384b8c088c290f06f70835402f903627c67de6f3 (patch) (side-by-side diff)
tree3a0659fed44bdb9f11f621e975ed02dff37f9731
parent3b73967c62da68d865f32ca91c8407e65b8ddc03 (diff)
downloadgrecs-384b8c088c290f06f70835402f903627c67de6f3.tar.gz
grecs-384b8c088c290f06f70835402f903627c67de6f3.tar.bz2
Implement json_array_set
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--src/json-gram.y18
-rw-r--r--src/json.h1
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) {
diff --git a/src/json.h b/src/json.h
index 7dffc4b..bd2c3d9 100644
--- a/src/json.h
+++ b/src/json.h
@@ -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);

Return to:

Send suggestions and report system problems to the System administrator.