summaryrefslogtreecommitdiff
path: root/tools/mesh/mesh-db.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mesh/mesh-db.c')
-rw-r--r--tools/mesh/mesh-db.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/tools/mesh/mesh-db.c b/tools/mesh/mesh-db.c
index c0c05a29a..1d047691d 100644
--- a/tools/mesh/mesh-db.c
+++ b/tools/mesh/mesh-db.c
@@ -1964,28 +1964,35 @@ bool mesh_db_node_set_composition(uint16_t unicast, uint8_t *data, uint16_t len)
while (len >= 2 && m--) {
mod_id = l_get_le16(data);
+ data += 2;
+ len -= 2;
+
+ jobj = get_model(unicast, unicast + i, mod_id, false);
+ if (jobj)
+ continue;
jobj = init_model(mod_id);
if (!jobj)
goto fail;
json_object_array_add(jmods, jobj);
- data += 2;
- len -= 2;
}
while (len >= 4 && v--) {
mod_id = l_get_le16(data + 2);
mod_id = l_get_le16(data) << 16 | mod_id;
+ data += 4;
+ len -= 4;
+
+ jobj = get_model(unicast, unicast + i, mod_id, true);
+ if (jobj)
+ continue;
jobj = init_vendor_model(mod_id);
if (!jobj)
goto fail;
json_object_array_add(jmods, jobj);
-
- data += 4;
- len -= 4;
}
i++;