aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/PropSet.cxx28
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++;