mirror of
https://github.com/radareorg/radare2.git
synced 2024-11-30 16:40:57 +00:00
Use asserts in pj api to catch this issue earlier ##json
This commit is contained in:
parent
64b97c2113
commit
e0572e0d02
@ -6377,7 +6377,7 @@ static bool cmd_anal_refs(RCore *core, const char *input) {
|
||||
}
|
||||
free (res);
|
||||
free (res1);
|
||||
free (name);
|
||||
R_FREE (name);
|
||||
r_anal_var_free (var);
|
||||
r_list_free (list);
|
||||
r_list_free (list1);
|
||||
|
109
libr/util/pj.c
109
libr/util/pj.c
@ -4,21 +4,21 @@
|
||||
#include <r_util/r_print.h>
|
||||
|
||||
static void pj_raw(PJ *j, const char *msg) {
|
||||
if (j && msg && *msg) {
|
||||
r_return_if_fail (j && msg);
|
||||
if (*msg) {
|
||||
r_strbuf_append (j->sb, msg);
|
||||
}
|
||||
}
|
||||
|
||||
static void pj_comma(PJ *j) {
|
||||
if (j) {
|
||||
if (!j->is_key) {
|
||||
if (!j->is_first) {
|
||||
pj_raw (j, ",");
|
||||
}
|
||||
r_return_if_fail (j);
|
||||
if (!j->is_key) {
|
||||
if (!j->is_first) {
|
||||
pj_raw (j, ",");
|
||||
}
|
||||
j->is_first = false;
|
||||
j->is_key = false;
|
||||
}
|
||||
j->is_first = false;
|
||||
j->is_key = false;
|
||||
}
|
||||
|
||||
R_API PJ *pj_new() {
|
||||
@ -38,14 +38,11 @@ R_API void pj_free(PJ *pj) {
|
||||
}
|
||||
|
||||
R_API char *pj_drain(PJ *pj) {
|
||||
if (pj) {
|
||||
r_return_val_if_fail (pj->level == 0, NULL);
|
||||
char *res = r_strbuf_drain (pj->sb);
|
||||
pj->sb = NULL;
|
||||
free (pj);
|
||||
return res;
|
||||
}
|
||||
return NULL;
|
||||
r_return_val_if_fail (pj && pj->level == 0, NULL);
|
||||
char *res = r_strbuf_drain (pj->sb);
|
||||
pj->sb = NULL;
|
||||
free (pj);
|
||||
return res;
|
||||
}
|
||||
|
||||
R_API const char *pj_string(PJ *j) {
|
||||
@ -67,23 +64,19 @@ static PJ *pj_begin(PJ *j, char type) {
|
||||
}
|
||||
|
||||
R_API PJ *pj_o(PJ *j) {
|
||||
if (j) {
|
||||
pj_comma (j);
|
||||
return pj_begin (j, '{');
|
||||
}
|
||||
return j;
|
||||
r_return_val_if_fail (j, NULL);
|
||||
pj_comma (j);
|
||||
return pj_begin (j, '{');
|
||||
}
|
||||
|
||||
R_API PJ *pj_a(PJ *j) {
|
||||
if (j) {
|
||||
pj_comma (j);
|
||||
return pj_begin (j, '[');
|
||||
}
|
||||
return j;
|
||||
r_return_val_if_fail (j, j);
|
||||
pj_comma (j);
|
||||
return pj_begin (j, '[');
|
||||
}
|
||||
|
||||
R_API PJ *pj_end(PJ *j) {
|
||||
r_return_val_if_fail (j && j->level > 0, NULL);
|
||||
r_return_val_if_fail (j && j->level > 0, j);
|
||||
if (--j->level < 1) {
|
||||
char msg[2] = { j->braces[j->level], 0 };
|
||||
pj_raw (j, msg);
|
||||
@ -107,10 +100,9 @@ R_API PJ *pj_k(PJ *j, const char *k) {
|
||||
}
|
||||
|
||||
R_API PJ *pj_kn(PJ *j, const char *k, ut64 n) {
|
||||
if (j && k) {
|
||||
pj_k (j, k);
|
||||
pj_n (j, n);
|
||||
}
|
||||
r_return_val_if_fail (j && k, NULL);
|
||||
pj_k (j, k);
|
||||
pj_n (j, n);
|
||||
return j;
|
||||
}
|
||||
|
||||
@ -123,30 +115,28 @@ R_API PJ *pj_kN(PJ *j, const char *k, st64 n) {
|
||||
}
|
||||
|
||||
R_API PJ *pj_kd(PJ *j, const char *k, double d) {
|
||||
if (j && k) {
|
||||
pj_k (j, k);
|
||||
pj_d (j, d);
|
||||
}
|
||||
r_return_val_if_fail (j && k, NULL);
|
||||
pj_k (j, k);
|
||||
pj_d (j, d);
|
||||
return j;
|
||||
}
|
||||
|
||||
R_API PJ *pj_kf(PJ *j, const char *k, float d) {
|
||||
if (j && k) {
|
||||
pj_k (j, k);
|
||||
pj_f (j, d);
|
||||
}
|
||||
r_return_val_if_fail (j && k, NULL);
|
||||
pj_k (j, k);
|
||||
pj_f (j, d);
|
||||
return j;
|
||||
}
|
||||
R_API PJ *pj_ki(PJ *j, const char *k, int i) {
|
||||
if (j && k) {
|
||||
pj_k (j, k);
|
||||
pj_i (j, i);
|
||||
}
|
||||
r_return_val_if_fail (j && k, NULL);
|
||||
pj_k (j, k);
|
||||
pj_i (j, i);
|
||||
return j;
|
||||
}
|
||||
|
||||
R_API PJ *pj_ks(PJ *j, const char *k, const char *v) {
|
||||
if (j && k && v && *v) {
|
||||
r_return_val_if_fail (j && k && v, NULL);
|
||||
if (*k && *v) {
|
||||
pj_k (j, k);
|
||||
pj_s (j, v);
|
||||
}
|
||||
@ -154,32 +144,29 @@ R_API PJ *pj_ks(PJ *j, const char *k, const char *v) {
|
||||
}
|
||||
|
||||
R_API PJ *pj_kb(PJ *j, const char *k, bool v) {
|
||||
if (j && k) {
|
||||
pj_k (j, k);
|
||||
pj_b (j, v);
|
||||
}
|
||||
r_return_val_if_fail (j && k, NULL);
|
||||
pj_k (j, k);
|
||||
pj_b (j, v);
|
||||
return j;
|
||||
}
|
||||
|
||||
R_API PJ *pj_b(PJ *j, bool v) {
|
||||
if (j) {
|
||||
pj_comma (j);
|
||||
pj_raw (j, r_str_bool (v));
|
||||
}
|
||||
r_return_val_if_fail (j, NULL);
|
||||
pj_comma (j);
|
||||
pj_raw (j, r_str_bool (v));
|
||||
return j;
|
||||
}
|
||||
|
||||
R_API PJ *pj_s(PJ *j, const char *k) {
|
||||
if (j && k) {
|
||||
pj_comma (j);
|
||||
pj_raw (j, "\"");
|
||||
char *ek = r_str_escape_utf8_for_json (k, -1);
|
||||
if (ek) {
|
||||
pj_raw (j, ek);
|
||||
free (ek);
|
||||
}
|
||||
pj_raw (j, "\"");
|
||||
r_return_val_if_fail (j && k, j);
|
||||
pj_comma (j);
|
||||
pj_raw (j, "\"");
|
||||
char *ek = r_str_escape_utf8_for_json (k, -1);
|
||||
if (ek) {
|
||||
pj_raw (j, ek);
|
||||
free (ek);
|
||||
}
|
||||
pj_raw (j, "\"");
|
||||
return j;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user