Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "nacl_io/ossocket.h" | 5 #include "nacl_io/ossocket.h" |
| 6 | 6 |
| 7 #if defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__) | 7 #if defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__) |
| 8 | 8 |
| 9 static __thread int __h_errno__; | 9 #include <stdlib.h> |
| 10 #include <pthread.h> | |
| 11 | |
| 12 static pthread_key_t __h_errno_key; | |
| 13 static pthread_once_t __h_errno_once = PTHREAD_ONCE_INIT; | |
| 14 | |
| 15 static void __h_errno_create() { | |
| 16 pthread_key_create(&__h_errno_key, NULL); | |
| 17 } | |
| 10 | 18 |
| 11 extern "C" int *__h_errno_location() { | 19 extern "C" int *__h_errno_location() { |
|
Sam Clegg
2014/03/27 00:10:02
Make this into a .c file and drop the extern "C"s?
noelallen1
2014/03/27 18:13:48
Done.
| |
| 12 return &__h_errno__; | 20 int* h_errno_ptr; |
| 21 pthread_once(&__h_errno_once, __h_errno_create); | |
| 22 h_errno_ptr = (int *) pthread_getspecific(__h_errno_key); | |
| 23 | |
| 24 if (NULL == h_errno_ptr) { | |
| 25 h_errno_ptr = (int *) malloc(sizeof(int)); | |
| 26 pthread_setspecific(__h_errno_key, h_errno_ptr); | |
| 27 *h_errno_ptr = 0; | |
| 28 } | |
| 29 | |
| 30 return h_errno_ptr; | |
| 13 } | 31 } |
| 14 | 32 |
| 33 #if defined(__BIONIC__) | |
| 34 extern "C" int *__get_h_errno() { | |
| 35 return __h_errno_location(); | |
| 36 } | |
| 37 #endif | |
| 38 | |
| 15 #endif // defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__) | 39 #endif // defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__) |
| OLD | NEW |