From 9c8738a1b441696f93f2293748a2d25f7623edae Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Thu, 18 Oct 2001 02:03:56 +0000 Subject: Patch from Robin to ensure non-alphabetic characters are handled correctly in case insensitive comparisons. --- src/PropSet.cxx | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'src/PropSet.cxx') diff --git a/src/PropSet.cxx b/src/PropSet.cxx index 701b2a82c..73ac52343 100644 --- a/src/PropSet.cxx +++ b/src/PropSet.cxx @@ -26,13 +26,21 @@ static inline char MakeUpperCase(char ch) { return static_cast(ch - 'a' + 'A'); } +static inline bool IsLetter(char ch) { + return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')); +} + int CompareCaseInsensitive(const char *a, const char *b) { while (*a && *b) { if (*a != *b) { - char upperA = MakeUpperCase(*a); - char upperB = MakeUpperCase(*b); - if (upperA != upperB) - return upperA - upperB; + if (IsLetter(*a) && IsLetter(*b)) { + char upperA = MakeUpperCase(*a); + char upperB = MakeUpperCase(*b); + if (upperA != upperB) + return upperA - upperB; + } else { + return *a - *b; + } } a++; b++; @@ -44,10 +52,14 @@ int CompareCaseInsensitive(const char *a, const char *b) { int CompareNCaseInsensitive(const char *a, const char *b, int len) { while (*a && *b && len) { if (*a != *b) { - char upperA = MakeUpperCase(*a); - char upperB = MakeUpperCase(*b); - if (upperA != upperB) - return upperA - upperB; + if (IsLetter(*a) && IsLetter(*b)) { + char upperA = MakeUpperCase(*a); + char upperB = MakeUpperCase(*b); + if (upperA != upperB) + return upperA - upperB; + } else { + return *a - *b; + } } a++; b++; -- cgit v1.2.3