summaryrefslogtreecommitdiff
path: root/firmware/common/strnatcmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/common/strnatcmp.c')
-rw-r--r--firmware/common/strnatcmp.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/firmware/common/strnatcmp.c b/firmware/common/strnatcmp.c
index 0084ff3582..d77f7e995e 100644
--- a/firmware/common/strnatcmp.c
+++ b/firmware/common/strnatcmp.c
@@ -122,7 +122,8 @@ compare_left(char const *a, char const *b)
122 return 0; 122 return 0;
123} 123}
124 124
125static int strnatcmp0(char const *a, char const *b, int fold_case) 125static int strnatcmp0(char const *a, char const *b,
126 int (*cmp_fn)(const char*, const char*))
126{ 127{
127 int ai, bi; 128 int ai, bi;
128 int ca, cb; 129 int ca, cb;
@@ -150,13 +151,10 @@ static int strnatcmp0(char const *a, char const *b, int fold_case)
150 if (!ca && !cb) { 151 if (!ca && !cb) {
151 /* The strings compare the same. Call str[case]cmp() to ensure 152 /* The strings compare the same. Call str[case]cmp() to ensure
152 consistent results. */ 153 consistent results. */
153 if(fold_case) 154 return cmp_fn(a,b);
154 return strcasecmp(a,b);
155 else
156 return strcmp(a,b);
157 } 155 }
158 156
159 if (fold_case) { 157 if (cmp_fn == &strcasecmp) {
160 ca = nat_unify_case(ca); 158 ca = nat_unify_case(ca);
161 cb = nat_unify_case(cb); 159 cb = nat_unify_case(cb);
162 } 160 }
@@ -170,14 +168,12 @@ static int strnatcmp0(char const *a, char const *b, int fold_case)
170 } 168 }
171} 169}
172 170
173
174
175int strnatcmp(const char *a, const char *b) { 171int strnatcmp(const char *a, const char *b) {
176 return strnatcmp0(a, b, 0); 172 return strnatcmp0(a, b, strcmp);
177} 173}
178 174
179 175
180/* Compare, recognizing numeric string and ignoring case. */ 176/* Compare, recognizing numeric string and ignoring case. */
181int strnatcasecmp(const char *a, const char *b) { 177int strnatcasecmp(const char *a, const char *b) {
182 return strnatcmp0(a, b, 1); 178 return strnatcmp0(a, b, &strcasecmp);
183} 179}