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().