diff options
| author | Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> | 2017-08-07 17:34:45 -0400 |
|---|---|---|
| committer | Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> | 2017-08-07 17:34:45 -0400 |
| commit | f4173af1ad45a270a5d8b2283f8018582484a553 (patch) | |
| tree | 08a4e5efd254b4acdc3e524f1624e2c6be972e7b /Cryptlib/OpenSSL/crypto/async/arch/async_posix.h | |
| parent | 62f0afa2ecead02b1258dabab8097ca278a22f8f (diff) | |
| download | efi-boot-shim-f4173af1ad45a270a5d8b2283f8018582484a553.tar.gz efi-boot-shim-f4173af1ad45a270a5d8b2283f8018582484a553.zip | |
New upstream version 12+1501864225.b586175
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 */ |
