aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/async
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-11-13 11:22:21 +0000
committerMatt Caswell <matt@openssl.org>2015-11-20 23:37:17 +0000
commit2b2c78d4f0a73498739cfc0879299d7325c35160 (patch)
tree2ed0601fe6fa8482bca8646a8cc0b290386e48f4 /crypto/async
parente38565f536b7674ef507564b5c646712b1d7eed4 (diff)
downloadopenssl-2b2c78d4f0a73498739cfc0879299d7325c35160.tar.gz
Swap to using proper windows pipes
We were using _pipe to create a pipe on windows. This uses the "int" type for its file descriptor for compatibility. However most windows functions expect to use a "HANDLE". Probably we could get away with just casting but it seems more robust to use the proper type and main stream windows functions. Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto/async')
-rw-r--r--crypto/async/arch/async_null.c6
-rw-r--r--crypto/async/arch/async_posix.c6
-rw-r--r--crypto/async/arch/async_win.c20
-rw-r--r--crypto/async/async.c4
-rw-r--r--crypto/async/async_locl.h10
5 files changed, 25 insertions, 21 deletions
diff --git a/crypto/async/arch/async_null.c b/crypto/async/arch/async_null.c
index 05b4964eb2..f015c90fb7 100644
--- a/crypto/async/arch/async_null.c
+++ b/crypto/async/arch/async_null.c
@@ -91,17 +91,17 @@ int async_pool_can_grow(void) {
return 0;
}
-int async_pipe(int *pipefds)
+int async_pipe(OSSL_ASYNC_FD *pipefds)
{
return -1;
}
-int async_write1(int fd, const void *buf)
+int async_write1(OSSL_ASYNC_FD fd, const void *buf)
{
return -1;
}
-int async_read1(int fd, void *buf)
+int async_read1(OSSL_ASYNC_FD fd, void *buf)
{
return -1;
}
diff --git a/crypto/async/arch/async_posix.c b/crypto/async/arch/async_posix.c
index 78bf61c44e..3f6cb6274a 100644
--- a/crypto/async/arch/async_posix.c
+++ b/crypto/async/arch/async_posix.c
@@ -95,7 +95,7 @@ void async_fibre_free(async_fibre *fibre)
OPENSSL_free(fibre->fibre.uc_stack.ss_sp);
}
-int async_pipe(int *pipefds)
+int async_pipe(OSSL_ASYNC_FD *pipefds)
{
if (pipe(pipefds) == 0)
return 1;
@@ -103,7 +103,7 @@ int async_pipe(int *pipefds)
return 0;
}
-int async_write1(int fd, const void *buf)
+int async_write1(OSSL_ASYNC_FD fd, const void *buf)
{
if (write(fd, buf, 1) > 0)
return 1;
@@ -111,7 +111,7 @@ int async_write1(int fd, const void *buf)
return 0;
}
-int async_read1(int fd, void *buf)
+int async_read1(OSSL_ASYNC_FD fd, void *buf)
{
if (read(fd, buf, 1) > 0)
return 1;
diff --git a/crypto/async/arch/async_win.c b/crypto/async/arch/async_win.c
index fce3c481d6..9841a9ca92 100644
--- a/crypto/async/arch/async_win.c
+++ b/crypto/async/arch/async_win.c
@@ -87,25 +87,29 @@ VOID CALLBACK async_start_func_win(PVOID unused)
async_start_func();
}
-int async_pipe(int *pipefds)
+int async_pipe(OSSL_ASYNC_FD *pipefds)
{
- if (_pipe(pipefds, 256, _O_BINARY) == 0)
- return 1;
+ if (CreatePipe(&pipefds[0], &pipefds[1], NULL, 256) == 0)
+ return 0;
- return 0;
+ return 1;
}
-int async_write1(int fd, const void *buf)
+int async_write1(OSSL_ASYNC_FD fd, const void *buf)
{
- if (_write(fd, buf, 1) > 0)
+ DWORD numwritten = 0;
+
+ if (WriteFile(fd, buf, 1, &numwritten, NULL) && numwritten == 1)
return 1;
return 0;
}
-int async_read1(int fd, void *buf)
+int async_read1(OSSL_ASYNC_FD fd, void *buf)
{
- if (_read(fd, buf, 1) > 0)
+ DWORD numread = 0;
+
+ if (ReadFile(fd, buf, 1, &numread, NULL) && numread == 1)
return 1;
return 0;
diff --git a/crypto/async/async.c b/crypto/async/async.c
index 86f4c09675..5bf64afa22 100644
--- a/crypto/async/async.c
+++ b/crypto/async/async.c
@@ -109,7 +109,7 @@ static int async_ctx_free(void)
static ASYNC_JOB *async_job_new(void)
{
ASYNC_JOB *job = NULL;
- int pipefds[2];
+ OSSL_ASYNC_FD pipefds[2];
job = OPENSSL_malloc(sizeof (ASYNC_JOB));
if (job == NULL) {
@@ -387,7 +387,7 @@ ASYNC_JOB *ASYNC_get_current_job(void)
return ctx->currjob;
}
-int ASYNC_get_wait_fd(ASYNC_JOB *job)
+OSSL_ASYNC_FD ASYNC_get_wait_fd(ASYNC_JOB *job)
{
return job->wait_fd;
}
diff --git a/crypto/async/async_locl.h b/crypto/async/async_locl.h
index ba329788b3..3cf97479ed 100644
--- a/crypto/async/async_locl.h
+++ b/crypto/async/async_locl.h
@@ -73,8 +73,8 @@ struct async_job_st {
int ret;
int status;
int wake_set;
- int wait_fd;
- int wake_fd;
+ OSSL_ASYNC_FD wait_fd;
+ OSSL_ASYNC_FD wake_fd;
};
DECLARE_STACK_OF(ASYNC_JOB)
@@ -88,6 +88,6 @@ void async_release_job_to_pool(ASYNC_JOB *job);
size_t async_pool_max_size(void);
void async_release_pool(void);
int async_pool_can_grow(void);
-int async_pipe(int *pipefds);
-int async_write1(int fd, const void *buf);
-int async_read1(int fd, void *buf);
+int async_pipe(OSSL_ASYNC_FD *pipefds);
+int async_write1(OSSL_ASYNC_FD fd, const void *buf);
+int async_read1(OSSL_ASYNC_FD fd, void *buf);