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;
 }