From 477147b9827960cb0d639bb5c9a352b970434f93 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 27 Oct 2014 14:08:32 +0200 Subject: [PATCH] shared/gatt-db: Add gatt_db_attribute_write --- src/shared/gatt-db.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c index f6ce5f3af..5855f5d2b 100644 --- a/src/shared/gatt-db.c +++ b/src/shared/gatt-db.c @@ -944,5 +944,30 @@ bool gatt_db_attribute_write(struct gatt_db_attribute *attrib, uint16_t offset, gatt_db_attribute_write_t func, void *user_data) { - return false; + if (!attrib || !func) + return false; + + if (attrib->write_func) { + attrib->write_func(attrib->handle, offset, value, len, opcode, + bdaddr, attrib->user_data); + return true; + } + + /* For values stored in db allocate on demand */ + if (!attrib->value || offset >= attrib->value_len || + len > (unsigned) (attrib->value_len - offset)) { + attrib->value = realloc(attrib->value, len + offset); + if (!attrib->value) + return false; + /* Init data in the first allocation */ + if (!attrib->value_len) + memset(attrib->value, 0, offset); + attrib->value_len = len + offset; + } + + memcpy(&attrib->value[offset], value, len); + + func(attrib, 0, user_data); + + return true; } -- 2.47.3