aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2007-10-05 12:24:01 +0000
committerMarcus Brinkmann <[email protected]>2007-10-05 12:24:01 +0000
commitba56511854f8726e8c4222e09f3497727a8b5ae5 (patch)
treefa1e12534c3db97159f6d9cc0ed8d7c6e25717f2
parentBetter error mapping. (diff)
downloadlibassuan-ba56511854f8726e8c4222e09f3497727a8b5ae5.tar.gz
libassuan-ba56511854f8726e8c4222e09f3497727a8b5ae5.zip
2007-10-05 Marcus Brinkmann <[email protected]>
* assuan-uds.c (wsa2errno) [HAVE_W32_SYSTEM]: New function. (uds_reader, uds_writer) [HAVE_W32_SYSTEM]: Set errno.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/assuan-uds.c33
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 <[email protected]>
+
+ * assuan-uds.c (wsa2errno) [HAVE_W32_SYSTEM]: New function.
+ (uds_reader, uds_writer) [HAVE_W32_SYSTEM]: Set errno.
+
2007-10-04 Werner Koch <[email protected]>
* 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*/
}