summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/common/strnatcmp.c36
1 files changed, 3 insertions, 33 deletions
diff --git a/firmware/common/strnatcmp.c b/firmware/common/strnatcmp.c
index c67bda6b81..2ec920b0a1 100644
--- a/firmware/common/strnatcmp.c
+++ b/firmware/common/strnatcmp.c
@@ -95,34 +95,11 @@ compare_right(char const *a, char const *b)
95 return 0; 95 return 0;
96} 96}
97 97
98
99static int
100compare_left(char const *a, char const *b)
101{
102 /* Compare two left-aligned numbers: the first to have a
103 different value wins. */
104 for (;; a++, b++) {
105 if (!nat_isdigit(*a) && !nat_isdigit(*b))
106 return 0;
107 else if (!nat_isdigit(*a))
108 return -1;
109 else if (!nat_isdigit(*b))
110 return +1;
111 else if (*a < *b)
112 return -1;
113 else if (*a > *b)
114 return +1;
115 }
116
117 return 0;
118}
119
120
121static int strnatcmp0(char const *a, char const *b, int fold_case) 98static int strnatcmp0(char const *a, char const *b, int fold_case)
122{ 99{
123 int ai, bi; 100 int ai, bi;
124 char ca, cb; 101 char ca, cb;
125 int fractional, result; 102 int result;
126 103
127 assert(a && b); 104 assert(a && b);
128 ai = bi = 0; 105 ai = bi = 0;
@@ -138,15 +115,8 @@ static int strnatcmp0(char const *a, char const *b, int fold_case)
138 115
139 /* process run of digits */ 116 /* process run of digits */
140 if (nat_isdigit(ca) && nat_isdigit(cb)) { 117 if (nat_isdigit(ca) && nat_isdigit(cb)) {
141 fractional = (ca == '0' || cb == '0'); 118 if ((result = compare_right(a+ai, b+bi)) != 0)
142 119 return result;
143 if (fractional) {
144 if ((result = compare_left(a+ai, b+bi)) != 0)
145 return result;
146 } else {
147 if ((result = compare_right(a+ai, b+bi)) != 0)
148 return result;
149 }
150 } 120 }
151 121
152 if (!ca && !cb) { 122 if (!ca && !cb) {