plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit cedc8995374227141a55c363a442f93a8486f8c8
parent ef4c04671995054ba459d9c894eb94d51fac1cb2
Author: ssnf <ssnf@ssnf.xyz>
Date:   Wed, 27 Aug 2025 13:36:21 +0000

libjson

Diffstat:
Minclude/json.h | 6++++--
Msrc/libjson/json.c | 13++++++++++++-
2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/include/json.h b/include/json.h @@ -22,11 +22,13 @@ typedef struct { typedef struct { ulong st[8]; /*obj stack*/ - String s; /*data buffer*/ JsonObj* o; /*obj vector*/ JsonObj* cur; /*cur obj*/ ulong n; /*stack number*/ - ulong pos; /*buffer pos*/ + + /* don't use these */ + String s; /*data buffer*/ + ulong pos; /*buffer pos*/ } Json; void json_close(Json *j); diff --git a/src/libjson/json.c b/src/libjson/json.c @@ -63,6 +63,7 @@ json_init(Json *j, char *file) JsonType json_next(Json *j, JsonType t) { + JsonObj *o; ulong i; char c, *p, *q; @@ -88,9 +89,19 @@ loop: j->cur->t = JObj; break; case ']': + c = '['; + if (0) case '}': + c = '{'; if (!j->n) return err(j, "bad stack"); + o = j->o + j->st[j->n - 1]; + if (o->v.c != c) + return err(j, "mismatch"); + if (j->cur->t != JNone) { + --j->pos; + break; + } --j->n; case ',': if (j->cur->k.s && j->cur->t == JNone) @@ -122,7 +133,7 @@ loop: goto loop; case ':': if (j->cur->k.s) - return err(j, "double key"); + return err(j, "double colon"); j->cur->k = j->cur->v.s; memset(&j->cur->v, 0, sizeof(j->cur->v)); j->cur->t = JNone;