Commit cae16138 authored by Hans Leidekker's avatar Hans Leidekker Committed by Alexandre Julliard

secur32: Translate errors from push/pull callbacks.

parent fa5759b9
......@@ -759,9 +759,8 @@ static char * CDECL schan_get_buffer(const struct schan_transport *t, struct sch
* *buff_len > 0 indicates that some data was read. May be less than
* what was requested, in which case the caller should call again if/
* when they want more.
* EAGAIN when no data could be read without blocking
* -1 when no data could be read without blocking
* another errno-style error value on failure
*
*/
static int CDECL schan_pull(struct schan_transport *t, void *buff, size_t *buff_len)
{
......@@ -774,7 +773,7 @@ static int CDECL schan_pull(struct schan_transport *t, void *buff, size_t *buff_
b = schan_get_buffer(t, &t->in, &local_len);
if (!b)
return EAGAIN;
return -1;
memcpy(buff, b, local_len);
t->in.offset += local_len;
......@@ -797,10 +796,9 @@ static int CDECL schan_pull(struct schan_transport *t, void *buff, size_t *buff_
* 0 on success
* *buff_len will be > 0 indicating how much data was written. May be less
* than what was requested, in which case the caller should call again
if/when they want to write more.
* EAGAIN when no data could be written without blocking
* if/when they want to write more.
* -1 when no data could be written without blocking
* another errno-style error value on failure
*
*/
static int CDECL schan_push(struct schan_transport *t, const void *buff, size_t *buff_len)
{
......@@ -813,7 +811,7 @@ static int CDECL schan_push(struct schan_transport *t, const void *buff, size_t
b = schan_get_buffer(t, &t->out, &local_len);
if (!b)
return EAGAIN;
return -1;
memcpy(b, buff, local_len);
t->out.offset += local_len;
......
......@@ -28,6 +28,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <errno.h>
#ifdef SONAME_LIBGNUTLS
#include <gnutls/gnutls.h>
#include <gnutls/crypto.h>
......@@ -204,9 +205,14 @@ static ssize_t pull_adapter(gnutls_transport_ptr_t transport, void *buff, size_t
gnutls_session_t s = (gnutls_session_t)callbacks->get_session_for_transport(t);
int ret = callbacks->pull(transport, buff, &buff_len);
if (ret)
if (ret == -1)
{
pgnutls_transport_set_errno(s, ret);
pgnutls_transport_set_errno(s, EAGAIN);
return -1;
}
if (ret < 0)
{
FIXME("unhandled error from pull callback %d\n", ret);
return -1;
}
......@@ -219,9 +225,14 @@ static ssize_t push_adapter(gnutls_transport_ptr_t transport, const void *buff,
gnutls_session_t s = (gnutls_session_t)callbacks->get_session_for_transport(t);
int ret = callbacks->push(transport, buff, &buff_len);
if (ret)
if (ret == -1)
{
pgnutls_transport_set_errno(s, EAGAIN);
return -1;
}
if (ret < 0)
{
pgnutls_transport_set_errno(s, ret);
FIXME("unhandled error from push callback %d\n", ret);
return -1;
}
......
......@@ -672,7 +672,7 @@ static OSStatus pull_adapter(SSLConnectionRef transport, void *buff, SIZE_T *buf
ret = noErr;
}
}
else if (status == EAGAIN)
else if (status == -1)
{
TRACE("Would block before being able to pull anything\n");
ret = errSSLWouldBlock;
......@@ -723,7 +723,7 @@ static OSStatus push_adapter(SSLConnectionRef transport, const void *buff, SIZE_
TRACE("Pushed %lu bytes\n", *buff_len);
ret = noErr;
}
else if (status == EAGAIN)
else if (status == -1)
{
TRACE("Would block before being able to push anything\n");
ret = errSSLWouldBlock;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment