Index: native_client_sdk/src/libraries/nacl_io/h_errno.c |
diff --git a/native_client_sdk/src/libraries/nacl_io/h_errno.c b/native_client_sdk/src/libraries/nacl_io/h_errno.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..11c28225e8c7573fa004a6d74f1b47af62434d42 |
--- /dev/null |
+++ b/native_client_sdk/src/libraries/nacl_io/h_errno.c |
@@ -0,0 +1,39 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
binji
2014/04/02 18:35:53
2014
noelallen1
2014/04/03 17:58:52
Done.
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "nacl_io/ossocket.h" |
+ |
+#if defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__) |
+ |
+#include <stdlib.h> |
+#include <pthread.h> |
+ |
+static pthread_key_t __h_errno_key; |
binji
2014/04/02 18:35:53
identifiers that begin with __ are reserved. Chrom
noelallen1
2014/04/03 17:58:52
Done.
|
+static pthread_once_t __h_errno_once = PTHREAD_ONCE_INIT; |
+ |
+static void __h_errno_create() { |
+ pthread_key_create(&__h_errno_key, NULL); |
+} |
+ |
+int *__h_errno_location() { |
+ int* h_errno_ptr; |
+ pthread_once(&__h_errno_once, __h_errno_create); |
+ h_errno_ptr = (int *) pthread_getspecific(__h_errno_key); |
+ |
+ if (NULL == h_errno_ptr) { |
+ h_errno_ptr = (int *) malloc(sizeof(int)); |
+ pthread_setspecific(__h_errno_key, h_errno_ptr); |
+ *h_errno_ptr = 0; |
+ } |
+ |
+ return h_errno_ptr; |
+} |
+ |
+#if defined(__BIONIC__) |
+int *__get_h_errno() { |
+ return __h_errno_location(); |
+} |
+#endif |
+ |
+#endif // defined(PROVIDES_SOCKET_API) && !defined(__GLIBC__) |