From f51cf03f8415198404198f7e1334ded6fdb72db4 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 1 Dec 2016 10:41:01 +0200 Subject: [PATCH] shared/gatt-db: Make gatt_db_clear call gatt_db_clear_range This makes gatt_db_clear much simpler while making gatt_db_clear_range detect full database clear resetting next_handle properly if the database is empty. --- src/shared/gatt-db.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c index 513451f4f..8ef6f3bca 100644 --- a/src/shared/gatt-db.c +++ b/src/shared/gatt-db.c @@ -410,14 +410,7 @@ bool gatt_db_remove_service(struct gatt_db *db, bool gatt_db_clear(struct gatt_db *db) { - if (!db) - return false; - - queue_remove_all(db->services, NULL, NULL, gatt_db_service_destroy); - - db->next_handle = 0; - - return true; + return gatt_db_clear_range(db, 1, UINT16_MAX); } static void gatt_db_service_get_handles(const struct gatt_db_service *service, @@ -455,12 +448,23 @@ bool gatt_db_clear_range(struct gatt_db *db, uint16_t start_handle, if (!db || start_handle > end_handle) return false; + /* Check if it is a full clear */ + if (start_handle == 1 && end_handle == UINT16_MAX) { + queue_remove_all(db->services, NULL, NULL, + gatt_db_service_destroy); + goto done; + } + range.start = start_handle; range.end = end_handle; queue_remove_all(db->services, match_range, &range, gatt_db_service_destroy); +done: + if (gatt_db_isempty(db)) + db->next_handle = 0; + return true; } -- 2.47.3