diff options
author | Jay Satiro <raysatiro@yahoo.com> | 2017-06-19 00:52:38 -0400 |
---|---|---|
committer | Jay Satiro <raysatiro@yahoo.com> | 2017-07-10 02:09:27 -0400 |
commit | af0216251b94e751baa47146ac9609db70793b8e (patch) | |
tree | de39c7130d519f0bcda17b9a09df822f02fc32e6 /lib/curl_threads.c | |
parent | 17da6750026cf00277aad3a44fd20b1a4cea6406 (diff) | |
download | curl-af0216251b94e751baa47146ac9609db70793b8e.tar.gz |
curl_setup_once: Remove ERRNO/SET_ERRNO macros
Prior to this change (SET_)ERRNO mapped to GetLastError/SetLastError
for Win32 and regular errno otherwise.
I reviewed the code and found no justifiable reason for conflating errno
on WIN32 with GetLastError/SetLastError. All Win32 CRTs support errno,
and any Win32 multithreaded CRT supports thread-local errno.
Fixes https://github.com/curl/curl/issues/895
Closes https://github.com/curl/curl/pull/1589
Diffstat (limited to 'lib/curl_threads.c')
-rw-r--r-- | lib/curl_threads.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/curl_threads.c b/lib/curl_threads.c index a78eff5c2..19897107a 100644 --- a/lib/curl_threads.c +++ b/lib/curl_threads.c @@ -104,15 +104,22 @@ int Curl_thread_join(curl_thread_t *hnd) curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *), void *arg) { + curl_thread_t t; #ifdef _WIN32_WCE - return CreateThread(NULL, 0, func, arg, 0, NULL); + t = CreateThread(NULL, 0, func, arg, 0, NULL); #else - curl_thread_t t; t = (curl_thread_t)_beginthreadex(NULL, 0, func, arg, 0, NULL); - if((t == 0) || (t == (curl_thread_t)-1L)) +#endif + if((t == 0) || (t == (curl_thread_t)-1L)) { +#ifdef _WIN32_WCE + DWORD gle = GetLastError(); + errno = ((gle == ERROR_ACCESS_DENIED || + gle == ERROR_NOT_ENOUGH_MEMORY) ? + EACCES : EINVAL); +#endif return curl_thread_t_null; + } return t; -#endif } void Curl_thread_destroy(curl_thread_t hnd) |