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.
(cherry picked from commit f51cf03f8415198404198f7e1334ded6fdb72db4)
Change-Id: I3156fb9876eeb5a3b01441c81543324aaf301ce8
diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c
index 513451f..8ef6f3b 100644
--- a/src/shared/gatt-db.c
+++ b/src/shared/gatt-db.c
@@ -410,14 +410,7 @@
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 @@
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;
}