4 static errno_t __errno = E_SUCCESS;
5 static CRITICAL_SECTION errno_cs;
6 static bool errno_cs_initialized = false;
7 static is_last_errno = false;
9 void initializeErrno(void)
11 if (!errno_cs_initialized) {
12 memset(&errno_cs, 0, sizeof(CRITICAL_SECTION));
13 InitializeCriticalSection(&errno_cs);
14 errno_cs_initialized = true;
18 void terminateErrno(void)
20 if (errno_cs_initialized) {
21 DeleteCriticalSection(&errno_cs);
26 void setErrno(errno_t e)
28 EnterCriticalSection(&errno_cs);
30 if ((E_SUCCESS != e) && !is_last_errno) {
35 LeaveCriticalSection(&errno_cs);
38 errno_t getErrno(void)
41 EnterCriticalSection(&errno_cs);
43 LeaveCriticalSection(&errno_cs);