|
|
|
#include "platform.h"
|
|
|
|
#include "debug.h"
|
|
|
|
#include "stm32_assert.h"
|
|
|
|
#include "malloc_safe.h"
|
|
|
|
|
|
|
|
void *malloc_ck_do(size_t size, const char *file, uint32_t line)
|
|
|
|
{
|
|
|
|
if (size == 0) {
|
|
|
|
_warn_msg(file, line, "MALLOC OF SIZE 0");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
void *mem = pvPortMalloc(size);
|
|
|
|
_malloc_trace(size, mem, file, line);
|
|
|
|
if (mem == NULL) {
|
|
|
|
_warn_msg(file, line, "MALLOC FAILED");
|
|
|
|
}
|
|
|
|
return mem;
|
|
|
|
}
|
|
|
|
|
|
|
|
void *calloc_ck_do(size_t nmemb, size_t size, const char *file, uint32_t line)
|
|
|
|
{
|
|
|
|
void *mem = malloc_ck_do(nmemb*size, file, line);
|
|
|
|
if (mem == NULL) return NULL;
|
|
|
|
memset(mem, 0, size*nmemb);
|
|
|
|
return mem;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *strdup_ck_do(const char *s, const char* file, uint32_t line)
|
|
|
|
{
|
|
|
|
size_t len = strlen(s) + 1;
|
|
|
|
void *new = malloc_ck_do(len, file, line);
|
|
|
|
if (new == NULL) return NULL;
|
|
|
|
return (char *) memcpy (new, s, len);
|
|
|
|
}
|
|
|
|
|
|
|
|
char *strndup_ck_do(const char *s, uint32_t len, const char* file, uint32_t line)
|
|
|
|
{
|
|
|
|
// TODO verify - this was not tested
|
|
|
|
size_t alen = MIN(strlen(s) + 1, len);
|
|
|
|
uint8_t *new = malloc_ck_do(alen, file, line);
|
|
|
|
if (new == NULL) return NULL;
|
|
|
|
memcpy (new, s, alen-1);
|
|
|
|
new[alen-1] = '\0';
|
|
|
|
return (char *) new;
|
|
|
|
}
|