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;
}
--
⑨