From 5d7c3c0a594a57705f42ad6e1fa454234bfe7b56 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 16 Sep 2010 17:45:27 -0400 Subject: [PATCH] ccmake: Fix search with '/' Commit 7a18dd8e (Add searching of variables, 2003-03-07) added method cmCursesMainForm::JumpToCacheEntry to search for cache entries whose names match a given search string. The method also had a useless argument "int idx" probably left from earlier development iterations and hard-coded in all calls to the value '-1'. The method compared this argument to the "NumberOfVisibleEntries" member which at the time was of type "int" also. Commit ff1f8d0b (Fix or cast more integer conversions in cmake, 2010-06-29) changed the type of "NumberOfVisibleEntries" to size_t to fix other integer conversion warnings. An unsigned type makes sense given the purpose of the member. However, this caused the '-1' signed value to be converted to a large unsigned value in the above-mentioned comparison, leading to incorrect behavior. Fix the problem by removing the useless argument and the comparison. --- Source/CursesDialog/cmCursesMainForm.cxx | 14 +++++--------- Source/CursesDialog/cmCursesMainForm.h | 5 ++--- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx index 389ec7f53..7f3e36010 100644 --- a/Source/CursesDialog/cmCursesMainForm.cxx +++ b/Source/CursesDialog/cmCursesMainForm.cxx @@ -902,7 +902,7 @@ void cmCursesMainForm::HandleInput() this->SearchMode = false; if ( this->SearchString.size() > 0 ) { - this->JumpToCacheEntry(-1, this->SearchString.c_str()); + this->JumpToCacheEntry(this->SearchString.c_str()); this->OldSearchString = this->SearchString; } this->SearchString = ""; @@ -1076,7 +1076,7 @@ void cmCursesMainForm::HandleInput() { if ( this->OldSearchString.size() > 0 ) { - this->JumpToCacheEntry(-1, this->OldSearchString.c_str()); + this->JumpToCacheEntry(this->OldSearchString.c_str()); } } // switch advanced on/off @@ -1191,7 +1191,7 @@ int cmCursesMainForm::LoadCache(const char *) return r; } -void cmCursesMainForm::JumpToCacheEntry(int idx, const char* astr) +void cmCursesMainForm::JumpToCacheEntry(const char* astr) { std::string str; if ( astr ) @@ -1199,18 +1199,14 @@ void cmCursesMainForm::JumpToCacheEntry(int idx, const char* astr) str = cmSystemTools::LowerCase(astr); } - if ( size_t(idx) > this->NumberOfVisibleEntries ) - { - return; - } - if ( idx < 0 && str.size() == 0) + if(str.empty()) { return; } FIELD* cur = current_field(this->Form); int start_index = field_index(cur); int findex = start_index; - while ( (findex / 3) != idx ) + for(;;) { if ( str.size() > 0 ) { diff --git a/Source/CursesDialog/cmCursesMainForm.h b/Source/CursesDialog/cmCursesMainForm.h index 4084415bd..3e191b497 100644 --- a/Source/CursesDialog/cmCursesMainForm.h +++ b/Source/CursesDialog/cmCursesMainForm.h @@ -122,9 +122,8 @@ protected: // Remove an entry from the interface and the cache. void RemoveEntry(const char* value); - // Jump to the cache value with index idx. If string str is - // specified, it will stop on widget that contain that string. - void JumpToCacheEntry(int idx, const char* str); + // Jump to the cache entry whose name matches the string. + void JumpToCacheEntry(const char* str); // Copies of cache entries stored in the user interface std::vector* Entries;