wasi_socket_ext.c: avoid tls to make this library-friendly (#4338)
This commit is contained in:
@ -12,6 +12,26 @@
|
||||
#include <wasi/api.h>
|
||||
#include <wasi_socket_ext.h>
|
||||
|
||||
/*
|
||||
* Avoid direct TLS access to allow a single library to be
|
||||
* linked to both of threaded and non-threaded applications.
|
||||
*
|
||||
* wasi-libc's errno is a TLS variable, exposed directly via
|
||||
* errno.h. if we use it here, LLVM may lower it differently,
|
||||
* depending on enabled features like atomcs and bulk-memory.
|
||||
* we tweak the way to access errno here in order to make us
|
||||
* compatible with both of threaded and non-threaded applications.
|
||||
* __errno_location() should be reasonably stable because
|
||||
* it was introduced as an alternative ABI for non-C software.
|
||||
* https://github.com/WebAssembly/wasi-libc/pull/347
|
||||
*/
|
||||
#if defined(errno)
|
||||
#undef errno
|
||||
#endif
|
||||
int *
|
||||
__errno_location(void);
|
||||
#define errno (*__errno_location())
|
||||
|
||||
#define HANDLE_ERROR(error) \
|
||||
if (error != __WASI_ERRNO_SUCCESS) { \
|
||||
errno = error; \
|
||||
|
||||
Reference in New Issue
Block a user