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.c | |
| 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.c')
| -rw-r--r-- | Cryptlib/OpenSSL/crypto/async/arch/async_posix.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Cryptlib/OpenSSL/crypto/async/arch/async_posix.c b/Cryptlib/OpenSSL/crypto/async/arch/async_posix.c new file mode 100644 index 00000000..02c342d3 --- /dev/null +++ b/Cryptlib/OpenSSL/crypto/async/arch/async_posix.c @@ -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 + */ + +/* This must be the first #include file */ +#include "../async_locl.h" + +#ifdef ASYNC_POSIX + +# include <stddef.h> +# include <unistd.h> + +#define STACKSIZE 32768 + +int ASYNC_is_capable(void) +{ + ucontext_t ctx; + + /* + * Some platforms provide getcontext() but it does not work (notably + * MacOSX PPC64). Check for a working getcontext(); + */ + return getcontext(&ctx) == 0; +} + +void async_local_cleanup(void) +{ +} + +int async_fibre_makecontext(async_fibre *fibre) +{ + fibre->env_init = 0; + if (getcontext(&fibre->fibre) == 0) { + fibre->fibre.uc_stack.ss_sp = OPENSSL_malloc(STACKSIZE); + if (fibre->fibre.uc_stack.ss_sp != NULL) { + fibre->fibre.uc_stack.ss_size = STACKSIZE; + fibre->fibre.uc_link = NULL; + makecontext(&fibre->fibre, async_start_func, 0); + return 1; + } + } else { + fibre->fibre.uc_stack.ss_sp = NULL; + } + return 0; +} + +void async_fibre_free(async_fibre *fibre) +{ + OPENSSL_free(fibre->fibre.uc_stack.ss_sp); + fibre->fibre.uc_stack.ss_sp = NULL; +} + +#endif |
