aboutsummaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-02-17 14:14:36 +0000
committerMatt Caswell <matt@openssl.org>2015-11-20 23:32:18 +0000
commit9ec1e03194568630a2e58232d56e9d37dd13ed7d (patch)
tree0e6c1fa2f6895d99d0cdc36733c2b813dd41bedd /crypto
parent501083049590455b1862edd7573fd51bb37bb037 (diff)
downloadopenssl-9ec1e03194568630a2e58232d56e9d37dd13ed7d.zip
openssl-9ec1e03194568630a2e58232d56e9d37dd13ed7d.tar.gz
openssl-9ec1e03194568630a2e58232d56e9d37dd13ed7d.tar.bz2
Add null async implementation
Create a "null" async implementation for platforms that lack support. This just does nothing when called and therefore performs synchronously. Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/async/Makefile10
-rw-r--r--crypto/async/arch/async_null.h76
-rw-r--r--crypto/async/async.c6
-rw-r--r--crypto/async/async_locl.h5
4 files changed, 86 insertions, 11 deletions
diff --git a/crypto/async/Makefile b/crypto/async/Makefile
index 25b4f93..ec6f2b5 100644
--- a/crypto/async/Makefile
+++ b/crypto/async/Makefile
@@ -85,14 +85,14 @@ arch/async_posix.o: ../../include/openssl/opensslv.h
arch/async_posix.o: ../../include/openssl/ossl_typ.h
arch/async_posix.o: ../../include/openssl/safestack.h
arch/async_posix.o: ../../include/openssl/stack.h
-arch/async_posix.o: ../../include/openssl/symhacks.h arch/../arch/async_posix.h
-arch/async_posix.o: arch/../arch/async_win.h arch/../async_locl.h
-arch/async_posix.o: arch/async_posix.c
+arch/async_posix.o: ../../include/openssl/symhacks.h arch/../arch/async_null.h
+arch/async_posix.o: arch/../arch/async_posix.h arch/../arch/async_win.h
+arch/async_posix.o: arch/../async_locl.h arch/async_posix.c
arch/async_win.o: ../../include/openssl/async.h arch/async_win.c
arch/async_win.o: arch/async_win.h
async.o: ../../include/openssl/async.h ../../include/openssl/crypto.h
async.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
async.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
async.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
-async.o: ../../include/openssl/symhacks.h arch/async_posix.h arch/async_win.h
-async.o: async.c async_locl.h
+async.o: ../../include/openssl/symhacks.h arch/async_null.h arch/async_posix.h
+async.o: arch/async_win.h async.c async_locl.h
diff --git a/crypto/async/arch/async_null.h b/crypto/async/arch/async_null.h
new file mode 100644
index 0000000..7d1c601
--- /dev/null
+++ b/crypto/async/arch/async_null.h
@@ -0,0 +1,76 @@
+/* crypto/async/arch/async_null.h */
+/*
+ * Written by Matt Caswell (matt@openssl.org) for the OpenSSL project.
+ */
+/* ====================================================================
+ * Copyright (c) 2015 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ */
+
+#include <openssl/async.h>
+
+/*
+ * If we haven't managed to detect any other async architecture then we default
+ * to NULL.
+ */
+#ifndef ASYNC_ARCH
+# define ASYNC_NULL
+# define ASYNC_ARCH
+
+typedef struct async_fibre_st {
+ int dummy;
+} ASYNC_FIBRE;
+
+
+
+# define ASYNC_set_ctx(nctx) 0
+# define ASYNC_get_ctx() ((ASYNC_CTX *)NULL)
+# define ASYNC_FIBRE_swapcontext(o,n,r) 0
+# define ASYNC_FIBRE_makecontext(c)
+# define ASYNC_FIBRE_free(f)
+# define ASYNC_FIBRE_init_dispatcher(f)
+#endif
diff --git a/crypto/async/async.c b/crypto/async/async.c
index 9b044d3..cef5f4f 100644
--- a/crypto/async/async.c
+++ b/crypto/async/async.c
@@ -73,7 +73,8 @@ static ASYNC_CTX *ASYNC_CTX_new(void)
ASYNC_FIBRE_init_dispatcher(&nctx->dispatcher);
nctx->currjob = NULL;
- ASYNC_set_ctx(nctx);
+ if(!ASYNC_set_ctx(nctx))
+ goto err;
return nctx;
err:
@@ -90,7 +91,8 @@ static int ASYNC_CTX_free(void)
OPENSSL_free(ASYNC_get_ctx());
}
- ASYNC_set_ctx(NULL);
+ if(!ASYNC_set_ctx(NULL))
+ return 0;
return 1;
}
diff --git a/crypto/async/async_locl.h b/crypto/async/async_locl.h
index fefe62a..4a6cb3e 100644
--- a/crypto/async/async_locl.h
+++ b/crypto/async/async_locl.h
@@ -57,10 +57,7 @@ typedef struct async_ctx_st ASYNC_CTX;
#include "arch/async_win.h"
#include "arch/async_posix.h"
-
-#ifndef ASYNC_ARCH
-# error Failed to detect async arch
-#endif
+#include "arch/async_null.h"
struct async_ctx_st {
ASYNC_FIBRE dispatcher;