Skip to content
Snippets Groups Projects
Commit 9b4666da authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

esp8266/posix_helpers: Set ENOMEM on memory alloc failure.

POSIX requires malloc(), etc. to set ENOMEM on the failure, and e.g.
BerkeleyDB relies on this:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/malloc.html

This should fix confusing OSError exceptions with 0 error code when
working with btree module.
parent 5671a11b
No related branches found
No related tags found
No related merge requests found
......@@ -26,22 +26,33 @@
#include <stdint.h>
#include <stdio.h>
#include <errno.h>
#include "py/mphal.h"
#include "py/gc.h"
// Functions for external libs like axTLS, BerkeleyDB, etc.
void *malloc(size_t size) {
return gc_alloc(size, false);
void *p = gc_alloc(size, false);
if (p == NULL) {
// POSIX requires ENOMEM to be set in case of error
errno = ENOMEM;
}
return p;
}
void free(void *ptr) {
gc_free(ptr);
}
void *calloc(size_t nmemb, size_t size) {
return m_malloc0(nmemb * size);
return malloc(nmemb * size);
}
void *realloc(void *ptr, size_t size) {
return gc_realloc(ptr, size, true);
void *p = gc_realloc(ptr, size, true);
if (p == NULL) {
// POSIX requires ENOMEM to be set in case of error
errno = ENOMEM;
}
return p;
}
#define PLATFORM_HTONL(_n) ((uint32_t)( (((_n) & 0xff) << 24) | (((_n) & 0xff00) << 8) | (((_n) >> 8) & 0xff00) | (((_n) >> 24) & 0xff) ))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment