From 3fda01066706245df9cf9878ed60889e4748e75d Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 2 May 2022 14:41:00 +0200 Subject: [PATCH] Add memory functions --- src_features/signMessageEIP712/mem.c | 58 ++++++++++++++++++++++++++++ src_features/signMessageEIP712/mem.h | 13 +++++++ 2 files changed, 71 insertions(+) create mode 100644 src_features/signMessageEIP712/mem.c create mode 100644 src_features/signMessageEIP712/mem.h diff --git a/src_features/signMessageEIP712/mem.c b/src_features/signMessageEIP712/mem.c new file mode 100644 index 0000000..0677783 --- /dev/null +++ b/src_features/signMessageEIP712/mem.c @@ -0,0 +1,58 @@ +#include +#include "mem.h" + +static uint8_t mem_buffer[SIZE_MEM_BUFFER]; +static size_t mem_idx; + +/** + * Initializes the memory buffer index + */ +void mem_init(void) +{ + mem_idx = 0; +} + +/** + * Resets the memory buffer index + */ +void mem_reset(void) +{ + mem_init(); +} + +/** + * Allocates a chunk of the memory buffer of a given size. + * Checks to see if there are enough space left in the memory buffer, returns + * the current location in the memory buffer and moves the index accordingly. + * + * @param[in] size Requested allocation size in bytes + * + * @return Allocated memory pointer; \ref NULL if not enough space left. + */ +void *mem_alloc(size_t size) +{ + if ((mem_idx + size) > SIZE_MEM_BUFFER) // Buffer exceeded + { + return NULL; + } + mem_idx += size; + return &mem_buffer[mem_idx - size]; +} + + +/** + * De-allocates a chunk of memory buffer by a given size. + * + * @param[in] size Requested deallocation size in bytes + */ +void mem_dealloc(size_t size) +{ + if (size > mem_idx) // More than is already allocated + { + mem_idx = 0; + } + else + { + mem_idx -= size; + } +} diff --git a/src_features/signMessageEIP712/mem.h b/src_features/signMessageEIP712/mem.h new file mode 100644 index 0000000..2a7b179 --- /dev/null +++ b/src_features/signMessageEIP712/mem.h @@ -0,0 +1,13 @@ +#ifndef MEM_H_ +#define MEM_H_ + +#include + +#define SIZE_MEM_BUFFER 1024 + +void mem_init(void); +void mem_reset(void); +void *mem_alloc(size_t size); +void mem_dealloc(size_t size); + +#endif // MEM_H_