EPOC32 malloc uses the thread heap, so it is already thread-safe and no _malloc_r variants are needed.
IMPORT_C char * | _dtoa_r | ( | struct _reent * | , |
double | , | |||
int | , | |||
int | , | |||
int * | , | |||
int * | , | |||
char ** | ||||
) |
IMPORT_C void | _mstats_r | ( | struct _reent * | , |
char * | ||||
) |
A wide-character version of reentrant of system().
IMPORT_C void | _srand_r | ( | struct _reent * | , |
unsigned | ||||
) |
IMPORT_C int | _setenv_r | ( | struct _reent * | , |
const char * | , | |||
const char * | , | |||
int | ||||
) |
A reentrant version of setenv().
A reentrant version of wsetenv().
IMPORT_C unsigned long | _strtoul_r | ( | struct _reent * | , |
const char * | , | |||
char ** | , | |||
int | ||||
) |
IMPORT_C void | _atexit_processing_r | ( | struct _reent * | ) |
It's possible to override exit() by supplying abort(), exit() and _exit() The generic exit() and abort() routines look like
void exit(int code) _ATTRIBUTE((noreturn)) { _atexit_processing_r(_REENT); _exit(code); } void abort(void) _ATTRIBUTE((noreturn)) { _exit(1); }
which then allows your _exit() to capture all exits from ESTLIB, except for __assert() which calls abort().