forked from Zondax/ledger-namada
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support the full set of Address variants.
- Loading branch information
Showing
4 changed files
with
617 additions
and
294 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/** | ||
* Dynamic allocator that uses a fixed-length buffer that is hopefully big enough | ||
* | ||
* The two functions alloc & dealloc use the buffer as a simple stack. | ||
* Especially useful when an unpredictable amount of data will be received and have to be stored | ||
* during the transaction but discarded right after. | ||
*/ | ||
|
||
//#ifdef HAVE_DYN_MEM_ALLOC | ||
|
||
#include <stdint.h> | ||
#include "mem.h" | ||
|
||
#define SIZE_MEM_BUFFER 8192 | ||
|
||
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 (push) 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 (pop) 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; | ||
} | ||
} | ||
|
||
//#endif // HAVE_DYN_MEM_ALLOC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
#ifndef MEM_H_ | ||
#define MEM_H_ | ||
|
||
//#ifdef HAVE_DYN_MEM_ALLOC | ||
|
||
#include <stdlib.h> | ||
|
||
void mem_init(void); | ||
void mem_reset(void); | ||
void *mem_alloc(size_t size); | ||
void mem_dealloc(size_t size); | ||
|
||
//#endif // HAVE_DYN_MEM_ALLOC | ||
|
||
#endif // MEM_H_ |
Oops, something went wrong.