commit 238c5c5
grunfink
·
2025-06-24 10:59:02 +0000 UTC
parent f7d398e
Some JSON code tweaks.
2 files changed,
+23,
-18
+22,
-17
1@@ -8,6 +8,7 @@
2 #define MAX_JSON_DEPTH 32
3 #endif
4
5+void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f);
6 int xs_json_dump(const xs_val *data, int indent, FILE *f);
7 xs_str *xs_json_dumps(const xs_val *data, int indent);
8
9@@ -77,7 +78,7 @@ static void _xs_json_indent(int level, int indent, FILE *f)
10 }
11
12
13-static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
14+void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f)
15 /* dumps partial data as JSON */
16 {
17 int c = 0;
18@@ -108,7 +109,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
19 fputc(',', f);
20
21 _xs_json_indent(level + 1, indent, f);
22- _xs_json_dump(v, level + 1, indent, f);
23+ xs_json_dump_value(v, level + 1, indent, f);
24
25 c++;
26 }
27@@ -135,7 +136,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
28 if (indent)
29 fputc(' ', f);
30
31- _xs_json_dump(v, level + 1, indent, f);
32+ xs_json_dump_value(v, level + 1, indent, f);
33
34 c++;
35 }
36@@ -154,6 +155,20 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
37 }
38
39
40+int xs_json_dump(const xs_val *data, int indent, FILE *f)
41+/* dumps data into a file as JSON */
42+{
43+ xstype t = xs_type(data);
44+
45+ if (t == XSTYPE_LIST || t == XSTYPE_DICT) {
46+ xs_json_dump_value(data, 0, indent, f);
47+ return 1;
48+ }
49+
50+ return 0;
51+}
52+
53+
54 xs_str *xs_json_dumps(const xs_val *data, int indent)
55 /* dumps data as a JSON string */
56 {
57@@ -173,20 +188,6 @@ xs_str *xs_json_dumps(const xs_val *data, int indent)
58 }
59
60
61-int xs_json_dump(const xs_val *data, int indent, FILE *f)
62-/* dumps data into a file as JSON */
63-{
64- xstype t = xs_type(data);
65-
66- if (t == XSTYPE_LIST || t == XSTYPE_DICT) {
67- _xs_json_dump(data, 0, indent, f);
68- return 1;
69- }
70-
71- return 0;
72-}
73-
74-
75 /** JSON loads **/
76
77 typedef enum {
78@@ -370,6 +371,8 @@ int xs_json_load_array_iter(FILE *f, xs_val **value, xstype *pt, int *c)
79 else
80 return -1;
81 }
82+ else
83+ *pt = xs_type(*value);
84
85 *c = *c + 1;
86
87@@ -466,6 +469,8 @@ int xs_json_load_object_iter(FILE *f, xs_str **key, xs_val **value, xstype *pt,
88 else
89 return -1;
90 }
91+ else
92+ *pt = xs_type(*value);
93
94 *c = *c + 1;
95
+1,
-1
1@@ -1 +1 @@
2-/* 851c21892c8df1d8f05ae95eaa4a5913e852653b 2025-06-21T17:58:11+02:00 */
3+/* a32c0d513ae24ad28ffc5c6c2c1cde75bb758e09 2025-06-23T17:43:10+02:00 */