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