summaryrefslogtreecommitdiff
path: root/src/string.c
diff options
context:
space:
mode:
authorAnna (navi) Figueiredo Gomes <navi@vlhl.dev>2024-04-12 12:18:03 +0200
committerAnna (navi) Figueiredo Gomes <navi@vlhl.dev>2024-04-12 12:18:03 +0200
commit1dd3e1c8d7deb0fa6fe6208b2dd8d236d1f3fc2e (patch)
tree92c27ac0a3bf86bfe5f00214e691c3c388dcab27 /src/string.c
parent46bc58545b95ee1cba1292dcaeb46c60533e0184 (diff)
libjson: new api
a lot... changed... Signed-off-by: Anna (navi) Figueiredo Gomes <navi@vlhl.dev>
Diffstat (limited to 'src/string.c')
-rw-r--r--src/string.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/string.c b/src/string.c
index 2aea375..e5847b8 100644
--- a/src/string.c
+++ b/src/string.c
@@ -4,22 +4,28 @@
#include <json.h>
#include "internal.h"
-char *json_string_get(const struct json *str) {
+char *json_string_get_mut(struct json *str) {
if (str->type != JSON_STRING)
return NULL;
return str->string;
}
+const char *json_string_get_const(const struct json *string) {
+ return json_string_get_mut((struct json *)string);
+}
+
enum json_parse_result parse_string(struct json **json_out, struct raw_json *raw) {
- struct json *json = json_new_string();
- if (!json)
+ char *str;
+ enum json_parse_result ret = parse_raw_string(&str, raw);
+ if (ret != JSON_PARSE_OK) {
+ return ret;
+ }
+ struct json *json = json_string_from(str);
+ if (!json) {
+ free(str);
return JSON_OOM;
- enum json_parse_result ret = parse_raw_string(&json->string, raw);
- if (ret == JSON_PARSE_OK) {
- *json_out = json;
- } else {
- json_delete(json);
}
+ *json_out = json;
return ret;
}
@@ -267,6 +273,8 @@ void json_string_set(struct json *dest, const char *string) {
json_clear(dest);
dest->key = key;
dest->type = JSON_STRING;
+ dest->string = strdup(string);
+ return;
}
free(dest->string);
dest->string = strdup(string);