From ba56511854f8726e8c4222e09f3497727a8b5ae5 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Fri, 5 Oct 2007 12:24:01 +0000 Subject: 2007-10-05 Marcus Brinkmann * assuan-uds.c (wsa2errno) [HAVE_W32_SYSTEM]: New function. (uds_reader, uds_writer) [HAVE_W32_SYSTEM]: Set errno. --- src/ChangeLog | 5 +++++ src/assuan-uds.c | 33 +++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index db16a34..e9589ff 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2007-10-05 Marcus Brinkmann + + * assuan-uds.c (wsa2errno) [HAVE_W32_SYSTEM]: New function. + (uds_reader, uds_writer) [HAVE_W32_SYSTEM]: Set errno. + 2007-10-04 Werner Koch * mkerrors: Map EAGAIN to GPG_ERR_EAGAIN for read and write diff --git a/src/assuan-uds.c b/src/assuan-uds.c index 71ab3b1..f31ee36 100644 --- a/src/assuan-uds.c +++ b/src/assuan-uds.c @@ -63,6 +63,25 @@ #endif /*USE_DESCRIPTOR_PASSING*/ +#ifdef HAVE_W32_SYSTEM +int +wsa2errno (int err) +{ + switch (err) + { + case WSAENOTSOCK: + return EINVAL; + case WSAEWOULDBLOCK: + return EAGAIN; + case ERROR_BROKEN_PIPE: + return EPIPE; + default: + return EIO; + } +} +#endif + + /* Read from a unix domain socket using sendmsg. FIXME: We don't need the buffering. It is a leftover from the time @@ -152,7 +171,10 @@ uds_reader (assuan_context_t ctx, void *buf, size_t buflen) return len; #else /*HAVE_W32_SYSTEM*/ - return recvfrom (HANDLE2SOCKET(ctx->inbound.fd), buf, buflen, 0, NULL, NULL); + int res = recvfrom (HANDLE2SOCKET(ctx->inbound.fd), buf, buflen, 0, NULL, NULL); + if (res < 0) + errno = wsa2errno (WSAGetLastError ()); + return res; #endif /*HAVE_W32_SYSTEM*/ } @@ -179,9 +201,12 @@ uds_writer (assuan_context_t ctx, const void *buf, size_t buflen) return len; #else /*HAVE_W32_SYSTEM*/ - return sendto (HANDLE2SOCKET(ctx->outbound.fd), buf, buflen, 0, - (struct sockaddr *)&ctx->serveraddr, - sizeof (struct sockaddr_in)); + int res = sendto (HANDLE2SOCKET(ctx->outbound.fd), buf, buflen, 0, + (struct sockaddr *)&ctx->serveraddr, + sizeof (struct sockaddr_in)); + if (res < 0) + errno = wsa2errno (WSAGetLastError ()); + return res; #endif /*HAVE_W32_SYSTEM*/ } -- cgit v1.2.3