shithub: util

Download patch

ref: d9fb5fea1930686c2f70914bbdabbe5f1970990a
parent: 947c5612d5d6aadc6e8b44911e977568d364dc3d
author: eli <eli@singularity>
date: Sun Sep 21 04:43:43 EDT 2025

oh you had a bsearch in ape? but plan 9 should be left the same as the other plan 9s to discourage lack in portability? and it needs to fit on the CD ROM?

--- a/llama2.c
+++ b/llama2.c
@@ -806,27 +806,28 @@
 }
 
 void *bsearch(void *key, void *base, usize num, usize size, int (*comp)(void *a, void *b)) {
-	usize A = 0;
-	usize B = num;
-	usize middle = A + ((B - A) / 2);
+	usize A;
+	usize B;
+	usize middle;
 	int result;
+	void *ptr;
 
-	if (A == B || A == middle)
-		return nil;
+	A = 0;
+	B = num - 1;
 
-	do {
-		result = comp(key, (void*)((uchar*)base + (middle * size)));
+	while (A <= B) {
+		middle = (B + A) / 2;
+		ptr = (char*)base + middle * size;
+		result = comp(key, ptr);
 
+		if (result == 0)
+			return ptr;
+
 		if (result > 0)
-			A = middle;
-		else if (result < 0)
-			B = middle;
+			A = middle + 1;
 		else
-			return (void*)((uchar*)base + (middle * size));
-
-		middle = A + ((B - A) / 2);
-
-	} while(A != B && A != middle);
+			B = middle - 1;
+	}
 
 	return nil;
 }
--