|
@@ -35,14 +35,29 @@ size_t get_size_availability(void *ptr) {
|
|
|
return get_header(ptr)->size;
|
|
|
}
|
|
|
|
|
|
-void set_size_and_free(void *ptr, size_t size) {
|
|
|
+void set_size_and_free(allocator_t *allocator, void *ptr, size_t size) {
|
|
|
+ block_header_t *next_block_header;
|
|
|
+
|
|
|
get_header(ptr)->size = size << 1;
|
|
|
+
|
|
|
+ if(allocator->border_ptr != ptr) {
|
|
|
+ next_block_header = (block_header_t *) ((char *) ptr + get_size(ptr));
|
|
|
+ next_block_header->previous_size = size << 1;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-void set_size_and_used(void *ptr, size_t size) {
|
|
|
- block_header_t *header = get_header(ptr);
|
|
|
+void set_size_and_used(allocator_t *allocator, void *ptr, size_t size) {
|
|
|
+ block_header_t *header, *next_block_header;
|
|
|
+
|
|
|
+ header = get_header(ptr);
|
|
|
header->size = size << 1;
|
|
|
header->size |= 1;
|
|
|
+
|
|
|
+ if(allocator->border_ptr != ptr) {
|
|
|
+ next_block_header = (block_header_t *) ((char *) ptr + get_size(ptr));
|
|
|
+ next_block_header->previous_size = size << 1;
|
|
|
+ next_block_header->previous_size |= 1;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
#ifdef FUTURE_FEATURES
|
|
@@ -55,6 +70,7 @@ void mark_used(allocator_t *allocator, void *ptr) {
|
|
|
block_header_t *next_block_header;
|
|
|
|
|
|
get_header(ptr)->size |= 1;
|
|
|
+
|
|
|
if(allocator->border_ptr != ptr) {
|
|
|
next_block_header = (block_header_t *) ((char *) ptr + get_size(ptr));
|
|
|
next_block_header->previous_size |= 1;
|
|
@@ -65,6 +81,7 @@ void mark_free(allocator_t *allocator, void *ptr) {
|
|
|
block_header_t *next_block_header;
|
|
|
|
|
|
get_header(ptr)->size &= (~ 0x1);
|
|
|
+
|
|
|
if(allocator->border_ptr != ptr) {
|
|
|
next_block_header = (block_header_t *) ((char *) ptr + get_size(ptr));
|
|
|
next_block_header->previous_size &= (~ 0x1);
|