summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter <peter@pmikkelsen.com>2026-09-04 20:40:22 +0000
committerpeter <peter@pmikkelsen.com>2026-09-04 20:40:22 +0000
commitea03b44757f3d4fc5e17a96cc74ff2d3d8a317ec (patch)
treee1bc7da2042ab935041a77504357aa2f39b1b9ed
parentd7c80ae3c76f2dd2e2ce3a39602fa7f04776d9c2 (diff)
Simplify the alloc callback function
FossilOrigin-Name: a08c14408099c9287646e3fcac0df8dfa04d23cd08273f6b17abe7bff79e0942
-rw-r--r--src/bin/main.c38
-rw-r--r--src/include/aplwc.h2
-rw-r--r--src/lib/main.c3
-rw-r--r--src/lib/memory.c2
-rw-r--r--tests/aplwc_errstr.c9
-rw-r--r--tests/aplwc_eval.c9
-rw-r--r--tests/aplwc_read.c9
-rw-r--r--tests/aplwc_utf8.c9
8 files changed, 38 insertions, 43 deletions
diff --git a/src/bin/main.c b/src/bin/main.c
index a7acc77..5861843 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -45,34 +45,34 @@ my_malloc(size_t size)
}
static void *
-my_alloc(size_t min, size_t max, size_t *actual)
+my_alloc(size_t size, size_t *actual)
{
- size_t target = min;
+ size_t target = size;
void *p;
- if(NEVER(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(actual){
+ if(NEVER(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 = my_malloc(target);
- if((p == NULL) && (min < target)){
- target = min;
+ if((p == NULL) && (size < target)){
+ target = size;
p = my_malloc(target);
}
- *actual = target;
+ if(actual)
+ *actual = target;
return p;
}
diff --git a/src/include/aplwc.h b/src/include/aplwc.h
index f07cd10..459a036 100644
--- a/src/include/aplwc.h
+++ b/src/include/aplwc.h
@@ -45,7 +45,7 @@ typedef struct { struct aplwc_ref ref; } AplwcLine;
typedef struct { struct aplwc_ref ref; } AplwcValue;
struct aplwc_fns {
- void *(*alloc)(size_t, size_t, size_t *);
+ void *(*alloc)(size_t, size_t *);
void (*dealloc)(void *);
int (*hook_alloc)(void);
};
diff --git a/src/lib/main.c b/src/lib/main.c
index 1bafa27..161fdde 100644
--- a/src/lib/main.c
+++ b/src/lib/main.c
@@ -25,14 +25,13 @@ aplwc_new(struct aplwc_fns fns, enum aplwc_rc *rcp)
{
enum aplwc_rc rc;
struct aplwc *aplwc;
- size_t size;
aplwc = NULL;
if(fns.alloc == NULL){
rc = APLWC_OUT_OF_MEMORY;
goto end;
}
- aplwc = fns.alloc(sizeof(*aplwc), sizeof(*aplwc), &size);
+ aplwc = fns.alloc(sizeof(*aplwc), NULL);
if(aplwc == NULL){
rc = APLWC_OUT_OF_MEMORY;
goto end;
diff --git a/src/lib/memory.c b/src/lib/memory.c
index 583b2ab..8dbb5f2 100644
--- a/src/lib/memory.c
+++ b/src/lib/memory.c
@@ -154,7 +154,7 @@ grow(struct aplwc *aplwc, size_t extra)
if(aplwc->fns.alloc == NULL)
goto error;
- unaligned_data = aplwc->fns.alloc(aplwc->size + extra + HEADER_SIZE + 2*ALIGNMENT, 0, &unaligned_newsize);
+ unaligned_data = aplwc->fns.alloc(aplwc->size + extra + HEADER_SIZE + 2*ALIGNMENT, &unaligned_newsize);
if(unaligned_data == NULL)
goto error;
diff --git a/tests/aplwc_errstr.c b/tests/aplwc_errstr.c
index fe9fa0e..cee1ea1 100644
--- a/tests/aplwc_errstr.c
+++ b/tests/aplwc_errstr.c
@@ -3,12 +3,11 @@
#include <aplwc.h>
static void *
-my_alloc(size_t min, size_t max, size_t *actual)
+my_alloc(size_t size, size_t *actual)
{
- (void)max;
-
- *actual = min;
- return malloc(min);
+ if(actual)
+ *actual = size;
+ return malloc(size);
}
static void
diff --git a/tests/aplwc_eval.c b/tests/aplwc_eval.c
index b0755eb..3d314e7 100644
--- a/tests/aplwc_eval.c
+++ b/tests/aplwc_eval.c
@@ -4,12 +4,11 @@
#include <aplwc.h>
static void *
-my_alloc(size_t min, size_t max, size_t *actual)
+my_alloc(size_t size, size_t *actual)
{
- (void)max;
-
- *actual = min;
- return malloc(min);
+ if(actual)
+ *actual = size;
+ return malloc(size);
}
static void
diff --git a/tests/aplwc_read.c b/tests/aplwc_read.c
index c361056..a5a79a9 100644
--- a/tests/aplwc_read.c
+++ b/tests/aplwc_read.c
@@ -4,12 +4,11 @@
#include <aplwc.h>
static void *
-my_alloc(size_t min, size_t max, size_t *actual)
+my_alloc(size_t size, size_t *actual)
{
- (void)max;
-
- *actual = min;
- return malloc(min);
+ if(actual)
+ *actual = size;
+ return malloc(size);
}
static void
diff --git a/tests/aplwc_utf8.c b/tests/aplwc_utf8.c
index a575da6..316845d 100644
--- a/tests/aplwc_utf8.c
+++ b/tests/aplwc_utf8.c
@@ -17,12 +17,11 @@ uint8_t good4[] = {0xe6,0x97,0xa5,0xe6,0x9c,0xac,0xe8,0xaa,0x9e,0};
uint8_t good5[] = {0xef,0xbb,0xbf,0xf0,0xa3,0x8e,0xb4,0};
static void *
-my_alloc(size_t min, size_t max, size_t *actual)
+my_alloc(size_t size, size_t *actual)
{
- (void)max;
-
- *actual = min;
- return malloc(min);
+ if(actual)
+ *actual = size;
+ return malloc(size);
}
static void