SimpleIndelibleMalloc/SimpleIndelibleMalloc.c

41 lines
988 B
C

//
// Created by zemon on 14.07.2022.
//
#include <memory.h>
#include "SimpleIndelibleMalloc.h"
void SimpleIndelibleMalloc_Init(tSimpleIndelibleMalloc *env, uint8_t *buffer, size_t size) {
env->buffer = buffer;
env->size = size;
env->used = 0;
}
void SimpleIndelibleMalloc_Clear(tSimpleIndelibleMalloc *env) {
memset(env->buffer, 0, env->size);
}
static void *SimpleIndelibleMalloc_Get(tSimpleIndelibleMalloc *env, size_t len) {
if ((env->used + len) > env->size) {
return 0;
}
void *result = env->buffer + env->used;
env->used += len;
return result;
}
static void SimpleIndelibleMalloc_Free(tSimpleIndelibleMalloc *env, void *ptr) {
//do nothing, it's indelible
}
tMemAllocInterface SimpleIndelibleMalloc_GetInterface(tSimpleIndelibleMalloc *env) {
return (tMemAllocInterface) {
.env = env,
.free = (void *) SimpleIndelibleMalloc_Free,
.alloc = (void *) SimpleIndelibleMalloc_Get,
};
}