shithub: rjson

Download patch

ref: 4e58e991e413c61f132552b28917f13f729b04bd
parent: 04bce0d9d10d6ced33db5982d67cea157f97c0ac
author: sirjofri <sirjofri@sirjofri.de>
date: Sun Mar 15 13:55:24 EDT 2026

clean up: unifies code paths

--- a/rjson.c
+++ b/rjson.c
@@ -93,8 +93,6 @@
 	JSON *j;
 	JSONEl *jel;
 	int count, i, ret, sz;
-	char **s;
-	double *n;
 	int *b;
 	char *o;
 	char **arr;
@@ -127,19 +125,12 @@
 		switch (j->t) {
 		case JSONNull:
 			/* skip null */
-			sysfatal("nulltype!");
+			fprint(2, "nulltype (%s)!", rj->name);
 			break;
 		case JSONBool:
-			b = (int*)((char*)target + rj->addr);
-			*b = !!j->n;
-			break;
 		case JSONNumber:
-			n = (double*)((char*)target + rj->addr);
-			*n = j->n;
-			break;
 		case JSONString:
-			s = (char**)((char*)target + rj->addr);
-			*s = strdup(j->s);
+			deserialize(j, j->t, (char*)target + rj->addr);
 			break;
 		case JSONArray:
 			count = rcountarr(j->first);
@@ -206,8 +197,6 @@
 	Rjson *rj;
 	int c;
 	int *i;
-	double *n;
-	char **s;
 	char *o;
 	char **arr;
 	void *entry;
@@ -234,25 +223,19 @@
 			jappend(json, rj->name, j);
 			continue;
 		}
-		j = mallocz(sizeof(JSON), 1);
-		assert(j);
-		jappend(json, rj->name, j);
-		
-		j->t = rj->type;
-		switch (j->t) {
+		switch (rj->type) {
 		case JSONBool:
-			i = (int*)((char*)src + rj->addr);
-			j->n = *i;
-			break;
 		case JSONNumber:
-			n = (double*)((char*)src + rj->addr);
-			j->n = *n;
-			break;
 		case JSONString:
-			s = (char**)((char*)src + rj->addr);
-			j->s = strdup(*s);
+			j = serialize(rj->type, (char*)src + rj->addr);
+			jappend(json, rj->name, j);
 			break;
 		case JSONArray:
+			j = mallocz(sizeof(JSON), 1);
+			assert(j);
+			j->t = rj->type;
+			jappend(json, rj->name, j);
+			
 			i = (int*)((char*)src + rj->countaddr);
 			arr = (char**)((char*)src + rj->addr);
 			if (rj->sub) {
--