diff options
author | Marcus Brinkmann <[email protected]> | 2007-10-05 12:24:01 +0000 |
---|---|---|
committer | Marcus Brinkmann <[email protected]> | 2007-10-05 12:24:01 +0000 |
commit | ba56511854f8726e8c4222e09f3497727a8b5ae5 (patch) | |
tree | fa1e12534c3db97159f6d9cc0ed8d7c6e25717f2 | |
parent | Better error mapping. (diff) | |
download | libassuan-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/ChangeLog | 5 | ||||
-rw-r--r-- | 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 <[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*/ } |