From 2a938d0fff660e4144c650e2c6bf8bfb207a01d3 Mon Sep 17 00:00:00 2001 From: tb <> Date: Fri, 3 Jan 2025 08:00:43 +0000 Subject: Make obj_bsearch_ex() resemble libc bsearch() a bit more ok jsing --- src/lib/libcrypto/stack/stack.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'src/lib') 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 @@ -/* $OpenBSD: stack.c,v 1.30 2024/12/28 19:07:24 tb Exp $ */ +/* $OpenBSD: stack.c,v 1.31 2025/01/03 08:00:43 tb Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -203,31 +203,27 @@ obj_bsearch_ex(const void *key, const void *base_, int num, int size, { const char *base = base_; int l, h, i = 0, c = 0; - const char *p = NULL; if (num == 0) - return (NULL); + return NULL; + l = 0; h = num; while (l < h) { i = (l + h) / 2; - p = &(base[i * size]); - c = (*cmp)(key, p); + if ((c = cmp(key, &base[i * size])) == 0) { + /* Return first match. */ + while (i > 0 && cmp(key, &base[(i - 1) * size]) == 0) + i--; + return &base[i * size]; + } if (c < 0) h = i; - else if (c > 0) - l = i + 1; else - break; - } - if (c != 0) - p = NULL; - else if (c == 0) { - while (i > 0 && (*cmp)(key, &(base[(i - 1) * size])) == 0) - i--; - p = &(base[i * size]); + l = i + 1; } - return (p); + + return NULL; } int -- cgit v1.2.3-55-g6feb