aboutsummaryrefslogtreecommitdiffstats
path: root/src/assuan-io.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/assuan-io.c')
-rw-r--r--src/assuan-io.c174
1 files changed, 2 insertions, 172 deletions
diff --git a/src/assuan-io.c b/src/assuan-io.c
index 88accc3..c5bbc99 100644
--- a/src/assuan-io.c
+++ b/src/assuan-io.c
@@ -38,185 +38,15 @@
#include "assuan-defs.h"
-#ifndef HAVE_W32_SYSTEM
-pid_t
-_assuan_waitpid (pid_t pid, int *status, int options)
-{
- return waitpid (pid, status, options);
-}
-#endif
-
-
-static ssize_t
-do_io_read (assuan_fd_t fd, void *buffer, size_t size)
-{
-#ifdef HAVE_W32_SYSTEM
- /* Due to the peculiarities of the W32 API we can't use read for a
- network socket and thus we try to use recv first and fallback to
- read if recv detects that it is not a network socket. */
- int n;
-
- n = recv (HANDLE2SOCKET(fd), buffer, size, 0);
- if (n == -1)
- {
- switch (WSAGetLastError ())
- {
- case WSAENOTSOCK:
- {
- DWORD nread = 0;
-
- n = ReadFile (fd, buffer, size, &nread, NULL);
- if (!n)
- {
- switch (GetLastError())
- {
- case ERROR_BROKEN_PIPE: errno = EPIPE; break;
- default: errno = EIO;
- }
- n = -1;
- }
- else
- n = (int)nread;
- }
- break;
-
- case WSAEWOULDBLOCK: errno = EAGAIN; break;
- case ERROR_BROKEN_PIPE: errno = EPIPE; break;
- default: errno = EIO; break;
- }
- }
- return n;
-#else /*!HAVE_W32_SYSTEM*/
- return read (fd, buffer, size);
-#endif /*!HAVE_W32_SYSTEM*/
-}
-
-
-ssize_t
-_assuan_io_read (assuan_fd_t fd, void *buffer, size_t size)
-{
- return do_io_read (fd, buffer, size);
-}
-
ssize_t
_assuan_simple_read (assuan_context_t ctx, void *buffer, size_t size)
{
- return do_io_read (ctx->inbound.fd, buffer, size);
+ return _assuan_read (ctx, ctx->inbound.fd, buffer, size);
}
-
-static ssize_t
-do_io_write (assuan_fd_t fd, const void *buffer, size_t size)
-{
-#ifdef HAVE_W32_SYSTEM
- /* Due to the peculiarities of the W32 API we can't use write for a
- network socket and thus we try to use send first and fallback to
- write if send detects that it is not a network socket. */
- int n;
-
- n = send (HANDLE2SOCKET(fd), buffer, size, 0);
- if (n == -1 && WSAGetLastError () == WSAENOTSOCK)
- {
- DWORD nwrite;
-
- n = WriteFile (fd, buffer, size, &nwrite, NULL);
- if (!n)
- {
- switch (GetLastError ())
- {
- case ERROR_BROKEN_PIPE:
- case ERROR_NO_DATA: errno = EPIPE; break;
- default: errno = EIO; break;
- }
- n = -1;
- }
- else
- n = (int)nwrite;
- }
- return n;
-#else /*!HAVE_W32_SYSTEM*/
- return write (fd, buffer, size);
-#endif /*!HAVE_W32_SYSTEM*/
-}
-
-ssize_t
-_assuan_io_write (assuan_fd_t fd, const void *buffer, size_t size)
-{
- return do_io_write (fd, buffer, size);
-}
-
ssize_t
_assuan_simple_write (assuan_context_t ctx, const void *buffer, size_t size)
{
- return do_io_write (ctx->outbound.fd, buffer, size);
+ return _assuan_write (ctx, ctx->outbound.fd, buffer, size);
}
-
-
-#ifdef HAVE_W32_SYSTEM
-int
-_assuan_simple_sendmsg (assuan_context_t ctx, void *msg)
-#else
-ssize_t
-_assuan_simple_sendmsg (assuan_context_t ctx, struct msghdr *msg)
-#endif
-{
-#ifdef HAVE_W32_SYSTEM
- errno = ENOSYS;
- return -1;
-#else
- int ret;
- while ( (ret = sendmsg (ctx->outbound.fd, msg, 0)) == -1 && errno == EINTR)
- ;
- return ret;
-#endif
-}
-
-
-#ifdef HAVE_W32_SYSTEM
-int
-_assuan_simple_recvmsg (assuan_context_t ctx, void *msg)
-#else
-ssize_t
-_assuan_simple_recvmsg (assuan_context_t ctx, struct msghdr *msg)
-#endif
-{
-#ifdef HAVE_W32_SYSTEM
- errno = ENOSYS;
- return -1;
-#else
- int ret;
- while ( (ret = recvmsg (ctx->inbound.fd, msg, 0)) == -1 && errno == EINTR)
- ;
- return ret;
-#endif
-}
-
-
-void
-_assuan_usleep (unsigned int usec)
-{
- if (usec)
- {
-#ifdef HAVE_NANOSLEEP
- struct timespec req;
- struct timespec rem;
-
- req.tv_sec = 0;
- req.tv_nsec = usec * 1000;
-
- while (nanosleep (&req, &rem) < 0 && errno == EINTR)
- req = rem;
-
-#elif defined(HAVE_W32_SYSTEM)
- Sleep (usec / 1000);
-#else
- struct timeval tv;
-
- tv.tv_sec = usec / 1000000;
- tv.tv_usec = usec % 1000000;
- select (0, NULL, NULL, NULL, &tv);
-#endif
- }
-}
-