summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorpeter <peter@pmikkelsen.com>2026-09-03 19:44:19 +0000
committerpeter <peter@pmikkelsen.com>2026-09-03 19:44:19 +0000
commitb46ed2f964b7d700ab79d88c41b759b594156e92 (patch)
treed1d3b3a77800ac636b894633e4829523efd0c250 /src
parentfa6a3ee5b24d5e227798330cff5f9ff060d6d863 (diff)
In aplwc-repl, allocate a bit more (next power of 2) than requested.
FossilOrigin-Name: 50c75ed6184d943f18022d48371cf4137b3e973136906fb39d21b52449dd743d
Diffstat (limited to 'src')
-rw-r--r--src/bin/main.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/bin/main.c b/src/bin/main.c
index 516fb51..02b3d0a 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -26,10 +26,33 @@
static void *
my_alloc(size_t min, size_t max, size_t *actual)
{
- UNUSED_PARAMETER(max);
+ size_t target = min;
+ void *p;
+
+ if(target == 0)
+ target = 1;
+ else{
+ target--;
+ target |= target >> 1;
+ target |= target >> 2;
+ target |= target >> 4;
+ target |= target >> 8;
+ target |= target >> 16;
+ target |= target >> 32;
+ target++;
+ }
+
+ if(max && (target > max))
+ target = max;
+
+ p = malloc(target);
+ if((p == NULL) && (min < target)){
+ target = min;
+ p = malloc(target);
+ }
- *actual = min;
- return malloc(min);
+ *actual = target;
+ return p;
}
static void