diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-05-07 19:22:36 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-05-07 19:22:36 +0000 |
commit | fdedd5397dcbec32a4591feca9a3f6a0eba60492 (patch) | |
tree | 3f693ea9caf3ee6185989313e651baaf7f4c021e /include | |
parent | 671fa97a4b8c560150104329b517efbf2609297c (diff) | |
download | external_llvm-fdedd5397dcbec32a4591feca9a3f6a0eba60492.zip external_llvm-fdedd5397dcbec32a4591feca9a3f6a0eba60492.tar.gz external_llvm-fdedd5397dcbec32a4591feca9a3f6a0eba60492.tar.bz2 |
Fix some serious logical errors in CStrInCStrNoCase pointed out by Bill.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50826 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/ADT/StringExtras.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/include/llvm/ADT/StringExtras.h b/include/llvm/ADT/StringExtras.h index e3b3c87..8ce53fc 100644 --- a/include/llvm/ADT/StringExtras.h +++ b/include/llvm/ADT/StringExtras.h @@ -144,26 +144,29 @@ static inline bool StringsEqualNoCase(const std::string &LHS, /// CStrInCStrNoCase - Portable version of strcasestr. Locates the first /// occurance of c-string 's1' in string 's2', ignoring case. Returns -/// NULL if 's1' cannot be found. +/// NULL if 's1' cannot be found. NOTE: the arguments are provided +/// in a different order than strcasestr. static inline const char* CStrInCStrNoCase(const char *s1, const char *s2) { // Are either strings NULL or empty? if (!s1 || !s2 || s1[0] == '\0' || s2[0] == '\0') return 0; + if (s1 == s2) + return s1; + const char *I1=s1, *I2=s2; while (*I1 != '\0' || *I2 != '\0' ) if (tolower(*I1) != tolower(*I2)) { // No match. Start over. - ++s1; I1 = s1; I2 = s2; + ++s2; I1 = s1; I2 = s2; } else { // Character match. Advance to the next character. ++I1; ++I2; } - // If we exhausted all of the characters in 's2', then 's1' does not occur - // in it. - return *I2 == '\0' ? 0 : I1; + // If we exhausted all of the characters in 's1', then 's1' appears in 's2'. + return *I1 == '\0' ? s2 : 0; } /// getToken - This function extracts one token from source, ignoring any |