[tracker/tracker-0.6] Use gint64 not guint for binary search, array index was sometimes < 0



commit 7fad05c73c0059c09a8c9e3e2a4ba66a175b433b
Author: Martyn Russell <martyn imendio com>
Date:   Wed May 6 15:00:28 2009 +0100

    Use gint64 not guint for binary search, array index was sometimes < 0
    
    The left/right/center variables used in the binary search were defined
    as guint and center which is used for the index in the array had
    rolled over to max guint after being set to a value < 0.
---
 src/libtracker-db/tracker-db-index.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/libtracker-db/tracker-db-index.c b/src/libtracker-db/tracker-db-index.c
index 06051b7..e2a17f7 100644
--- a/src/libtracker-db/tracker-db-index.c
+++ b/src/libtracker-db/tracker-db-index.c
@@ -1238,8 +1238,8 @@ tracker_db_index_add_word (TrackerDBIndex *indez,
 	TrackerDBIndexItem     elem;
 	TrackerDBIndexItem    *current;
 	GArray		      *array;
-	guint                  left, right, center;
-	guint		       new_score;
+	gint64                 left, right, center;
+	gint64		       new_score;
 
 	g_return_if_fail (TRACKER_IS_DB_INDEX (indez));
 	g_return_if_fail (word != NULL);
@@ -1275,6 +1275,10 @@ tracker_db_index_add_word (TrackerDBIndex *indez,
 
 	do {
 		center += left;
+
+		/* For testing */
+		/* g_return_if_fail (center < array->len); */
+	
 		current = &g_array_index (array, TrackerDBIndexItem, center);
 
 		if (service_id > current->id) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]