diff options
author | tb <> | 2025-01-03 08:00:43 +0000 |
---|---|---|
committer | tb <> | 2025-01-03 08:00:43 +0000 |
commit | 2a938d0fff660e4144c650e2c6bf8bfb207a01d3 (patch) | |
tree | 3ca9b40b22aefc003355cb94e068e05e5b7d60fa | |
parent | 24f27716ca0a6e89dba4717a89fd53148947ac93 (diff) | |
download | openbsd-2a938d0fff660e4144c650e2c6bf8bfb207a01d3.tar.gz openbsd-2a938d0fff660e4144c650e2c6bf8bfb207a01d3.tar.bz2 openbsd-2a938d0fff660e4144c650e2c6bf8bfb207a01d3.zip |
Make obj_bsearch_ex() resemble libc bsearch() a bit more
ok jsing
-rw-r--r-- | src/lib/libcrypto/stack/stack.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/lib/libcrypto/stack/stack.c b/src/lib/libcrypto/stack/stack.c index e50c1bcac0..3736dba648 100644 --- a/src/lib/libcrypto/stack/stack.c +++ b/src/lib/libcrypto/stack/stack.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: stack.c,v 1.30 2024/12/28 19:07:24 tb Exp $ */ | 1 | /* $OpenBSD: stack.c,v 1.31 2025/01/03 08:00:43 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -203,31 +203,27 @@ obj_bsearch_ex(const void *key, const void *base_, int num, int size, | |||
203 | { | 203 | { |
204 | const char *base = base_; | 204 | const char *base = base_; |
205 | int l, h, i = 0, c = 0; | 205 | int l, h, i = 0, c = 0; |
206 | const char *p = NULL; | ||
207 | 206 | ||
208 | if (num == 0) | 207 | if (num == 0) |
209 | return (NULL); | 208 | return NULL; |
209 | |||
210 | l = 0; | 210 | l = 0; |
211 | h = num; | 211 | h = num; |
212 | while (l < h) { | 212 | while (l < h) { |
213 | i = (l + h) / 2; | 213 | i = (l + h) / 2; |
214 | p = &(base[i * size]); | 214 | if ((c = cmp(key, &base[i * size])) == 0) { |
215 | c = (*cmp)(key, p); | 215 | /* Return first match. */ |
216 | while (i > 0 && cmp(key, &base[(i - 1) * size]) == 0) | ||
217 | i--; | ||
218 | return &base[i * size]; | ||
219 | } | ||
216 | if (c < 0) | 220 | if (c < 0) |
217 | h = i; | 221 | h = i; |
218 | else if (c > 0) | ||
219 | l = i + 1; | ||
220 | else | 222 | else |
221 | break; | 223 | l = i + 1; |
222 | } | ||
223 | if (c != 0) | ||
224 | p = NULL; | ||
225 | else if (c == 0) { | ||
226 | while (i > 0 && (*cmp)(key, &(base[(i - 1) * size])) == 0) | ||
227 | i--; | ||
228 | p = &(base[i * size]); | ||
229 | } | 224 | } |
230 | return (p); | 225 | |
226 | return NULL; | ||
231 | } | 227 | } |
232 | 228 | ||
233 | int | 229 | int |