aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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.