From d503c81ac21e891ebce774bc68606dbe994d0d98 Mon Sep 17 00:00:00 2001
From: Suru Dissanaike <suru.dissanaike@iopsys.eu>
Date: Fri, 25 Oct 2019 10:14:22 +0200
Subject: [PATCH] json-editor: WIP json_object_del_by_idx for json-c version
 0.12.1

---
 src/json-editor.c | 38 ++++++++++++++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 4 deletions(-)

diff --git a/src/json-editor.c b/src/json-editor.c
index 72b7489..8b96889 100644
--- a/src/json-editor.c
+++ b/src/json-editor.c
@@ -292,13 +292,34 @@ out:
 	return 0;
 }
 
+struct json_object *json_object_e_del_by_idx(struct json_object *arr, int idx)
+{
+	struct json_object *el, *new;
+	int i;
+
+	if (!json_object_is_type(arr, json_type_array))
+		return arr;
+
+	new = json_object_new_array();	
+
+	for (i = 0; i < json_object_array_length(arr); i++) {
+		if (i == idx)
+			continue;
+
+		el = json_object_array_get_idx(arr, i);
+		json_object_array_add(new, el);
+	}
+
+	return new;
+}
+
 /**
  * del a value key pair to src object
  *
  */
 static int del_val(struct json_object *src, char *key)
 {
-	struct json_object *val;
+	struct json_object *val, *new, *new2;
 	int idx[32];
 	int len, rv = -1;
 	char parsed_key[32] = {0};
@@ -310,6 +331,9 @@ static int del_val(struct json_object *src, char *key)
 		json_object_object_del(src, parsed_key);
 		rv = 0;
 	} else {
+		if (len > 1)
+			new = json_object_new_array();
+
 		/* iterate every index that was appended to the key */
 		for (int i = 0; i < len; i++) {
 			struct json_object *j_idx;
@@ -328,14 +352,20 @@ static int del_val(struct json_object *src, char *key)
 			/* at final index, delete at specified idx */
 			else {
 				if (idx[i] > -1)
-					json_object_array_del_idx(val, idx[i], 1);
+					new2 = json_object_e_del_by_idx(val, idx[i]);
 				else
-					json_object_array_del_idx(val,
-							json_object_array_length(val) - 1, 1);
+					new2 = json_object_e_del_by_idx(val, idx[i]);
+
+				if (len > 1)
+					json_object_array_add(new, new2);
+				else
+					new = new2;
 
 				rv = 0;
 			}
 		}
+		json_object_object_del(src, parsed_key);
+		json_object_object_add(src, parsed_key, new);
 	}
 
 out:
-- 
GitLab