From: Sebastian Harl Date: Mon, 28 Sep 2015 20:07:08 +0000 (+0200) Subject: store_json: Fix parent/child detection. X-Git-Tag: sysdb-0.8.0~22 X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=commitdiff_plain;h=79debed9dacc5d48386124a1ee9a3f7be655fdf6;ds=sidebyside store_json: Fix parent/child detection. Rewinding the formatter state has to happen any time we see a parent object of the current object. This happens every time the current context isn't HOST (hosts don't have any parents) or the new object is an ATTRIBUTE (which are always children of whatever other object type). This broke in 3603db13105aefac4d6ceb356bcfd118a92fa654. --- diff --git a/src/core/store_json.c b/src/core/store_json.c index c8e35fe..a2c117b 100644 --- a/src/core/store_json.c +++ b/src/core/store_json.c @@ -142,11 +142,12 @@ handle_new_object(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj) return 0; } - if ((f->current >= 1) && (obj->type != SDB_ATTRIBUTE)) { - /* new entry of a previous type or a new type on the same level; + if ((f->context[f->current] != SDB_HOST) + && (obj->type != SDB_ATTRIBUTE)) { + /* new entry of the same type or a parent object; * rewind to the right state */ while ((f->current > 0) - && (f->context[f->current] == obj->type)) { + && (f->context[f->current] != obj->type)) { sdb_strbuf_append(f->buf, "}]"); --f->current; }