File tree Expand file tree Collapse file tree 1 file changed +18
-11
lines changed Expand file tree Collapse file tree 1 file changed +18
-11
lines changed Original file line number Diff line number Diff line change @@ -86,14 +86,6 @@ static struct comm_str *comm_str__new(const char *str)
86
86
return result ;
87
87
}
88
88
89
- static int comm_str__cmp (const void * _lhs , const void * _rhs )
90
- {
91
- const struct comm_str * lhs = * (const struct comm_str * const * )_lhs ;
92
- const struct comm_str * rhs = * (const struct comm_str * const * )_rhs ;
93
-
94
- return strcmp (comm_str__str (lhs ), comm_str__str (rhs ));
95
- }
96
-
97
89
static int comm_str__search (const void * _key , const void * _member )
98
90
{
99
91
const char * key = _key ;
@@ -169,9 +161,24 @@ static struct comm_str *comm_strs__findnew(const char *str)
169
161
}
170
162
result = comm_str__new (str );
171
163
if (result ) {
172
- comm_strs -> strs [comm_strs -> num_strs ++ ] = result ;
173
- qsort (comm_strs -> strs , comm_strs -> num_strs , sizeof (struct comm_str * ),
174
- comm_str__cmp );
164
+ int low = 0 , high = comm_strs -> num_strs - 1 ;
165
+ int insert = comm_strs -> num_strs ; /* Default to inserting at the end. */
166
+
167
+ while (low <= high ) {
168
+ int mid = low + (high - low ) / 2 ;
169
+ int cmp = strcmp (comm_str__str (comm_strs -> strs [mid ]), str );
170
+
171
+ if (cmp < 0 ) {
172
+ low = mid + 1 ;
173
+ } else {
174
+ high = mid - 1 ;
175
+ insert = mid ;
176
+ }
177
+ }
178
+ memmove (& comm_strs -> strs [insert + 1 ], & comm_strs -> strs [insert ],
179
+ (comm_strs -> num_strs - insert ) * sizeof (struct comm_str * ));
180
+ comm_strs -> num_strs ++ ;
181
+ comm_strs -> strs [insert ] = result ;
175
182
}
176
183
}
177
184
up_write (& comm_strs -> lock );
You can’t perform that action at this time.
0 commit comments