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.
crypto-aes
Paul Sokolovsky 5 years ago
parent 5671a11b81
commit 9b4666dad5
  1. 17
      ports/esp8266/posix_helpers.c

@ -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) ))

Loading…
Cancel
Save