diff options
| -rw-r--r-- | src/PropSet.cxx | 28 | 
1 files changed, 20 insertions, 8 deletions
| 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<char>(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++; | 
