diff options
author | Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> | 2018-08-21 14:22:44 -0400 |
---|---|---|
committer | Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> | 2018-08-21 14:22:44 -0400 |
commit | 7bf7a6d0852382bb645119b18df3ff461aaba247 (patch) | |
tree | 74089c9a1e552dfb9e5efa57468c8d7afda7e415 /Cryptlib/OpenSSL/crypto/async/arch/async_posix.h | |
parent | f892ac66084ab0315adb0c52e4a39b518730d023 (diff) | |
download | efi-boot-shim-upstream/15+1533136590.3beb971.tar.gz efi-boot-shim-upstream/15+1533136590.3beb971.zip |
New upstream version 15+1533136590.3beb971upstream/15+1533136590.3beb971
Diffstat (limited to 'Cryptlib/OpenSSL/crypto/async/arch/async_posix.h')
-rw-r--r-- | Cryptlib/OpenSSL/crypto/async/arch/async_posix.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Cryptlib/OpenSSL/crypto/async/arch/async_posix.h b/Cryptlib/OpenSSL/crypto/async/arch/async_posix.h new file mode 100644 index 00000000..3c61f7f7 --- /dev/null +++ b/Cryptlib/OpenSSL/crypto/async/arch/async_posix.h @@ -0,0 +1,58 @@ +/* + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ASYNC_ARCH_ASYNC_POSIX_H +#define OPENSSL_ASYNC_ARCH_ASYNC_POSIX_H +#include <openssl/e_os2.h> + +#if (defined(OPENSSL_SYS_UNIX) || defined(OPENSSL_SYS_CYGWIN)) \ + && defined(OPENSSL_THREADS) && !defined(OPENSSL_NO_ASYNC) \ + && !defined(__ANDROID__) && !defined(__OpenBSD__) + +# include <unistd.h> + +# if _POSIX_VERSION >= 200112L + +# include <pthread.h> + +# define ASYNC_POSIX +# define ASYNC_ARCH + +# include <ucontext.h> +# include <setjmp.h> +# include "e_os.h" + +typedef struct async_fibre_st { + ucontext_t fibre; + jmp_buf env; + int env_init; +} async_fibre; + +static ossl_inline int async_fibre_swapcontext(async_fibre *o, async_fibre *n, int r) +{ + o->env_init = 1; + + if (!r || !_setjmp(o->env)) { + if (n->env_init) + _longjmp(n->env, 1); + else + setcontext(&n->fibre); + } + + return 1; +} + +# define async_fibre_init_dispatcher(d) + +int async_fibre_makecontext(async_fibre *fibre); +void async_fibre_free(async_fibre *fibre); + +# endif +#endif +#endif /* OPENSSL_ASYNC_ARCH_ASYNC_POSIX_H */ |