diff options
| author | Marcus Brinkmann <[email protected]> | 2009-04-08 18:53:57 +0000 | 
|---|---|---|
| committer | Marcus Brinkmann <[email protected]> | 2009-04-08 18:53:57 +0000 | 
| commit | d255b4bec9a1fdf0864640750161ea12999e43a5 (patch) | |
| tree | 75e870ff7e07cb4f2bf30dc8a136c72eb4bf6bd4 /src/w32-io.c | |
| parent | 2009-03-23 Marcus Brinkmann <[email protected]> (diff) | |
| download | gpgme-d255b4bec9a1fdf0864640750161ea12999e43a5.tar.gz gpgme-d255b4bec9a1fdf0864640750161ea12999e43a5.zip | |
assuan/
2009-04-08  Marcus Brinkmann  <[email protected]>
	* assuan.h (_gpgme_io_socket): New prototype.
	(_ASSUAN_CUSTOM_IO, _assuan_custom_close, _assuan_custom_read)
	(_assuan_custom_write, _assuan_custom_pipe, _assuan_custom_socket)
	(_assuan_custom_connect): New macros.
	* assuan-socket.c (_assuan_close, _assuan_sock_new)
	(_assuan_sock_connect) [_ASSUAN_CUSTOM_IO]: Use custom I/O function.
	* assuan-buffer.c (assuan_read_line): Do not handle EAGAIN anymore.
	* assuan-client.c (_assuan_read_from_server): Likewise.
	* assuan-handler.c (process_next): Likewise
	* assuan-inquire.c (assuan_inquire): Likewise.
src/
2009-04-08  Marcus Brinkmann  <[email protected]>
	* w32-glib-io.c (giochannel_table): New members used, fd, socket.
	(find_channel): Drop CREATE argument.
	(new_dummy_channel_from_fd, new_channel_from_fd)
	(new_channel_from_socket): New functions.
	(_gpgm_io_fd2str): Implement for sockets.
	(_gpgme_io_write, _gpgme_io_read): Translate EAGAIN errors
	correctly.
	(_gpgme_io_pipe): Fix for new channel bookkeeping.
	(_gpgme_io_close, _gpgme_io_dup): Likewise.
	(wsa2errno, _gpgme_io_socket, _gpgme_io_connect): New.
	* w32-io.c (MAX_READERS, MAX_WRITERS): Bump up to 40.
	(wsa2errno, _gpgme_io_socket, _gpgme_io_connect): New.
	* w32-qt-io.cpp (_gpgme_io_socket, _gpgme_io_connect): New stubs.
	* version.c [HAVE_W32_SYSTEM]: Include "windows.h.
	(do_subsystem_inits) [HAVE_W32_SYSTEM]: Call WSAStartup.
	* engine-assuan.c (llass_status_handler): Ignore EAGAIN errors.
Diffstat (limited to '')
| -rw-r--r-- | src/w32-io.c | 64 | 
1 files changed, 62 insertions, 2 deletions
| diff --git a/src/w32-io.c b/src/w32-io.c index 1f62a6f1..1a65e537 100644 --- a/src/w32-io.c +++ b/src/w32-io.c @@ -53,8 +53,8 @@  #define READBUF_SIZE 4096  #define WRITEBUF_SIZE 4096  #define PIPEBUF_SIZE  4096 -#define MAX_READERS 20 -#define MAX_WRITERS 20 +#define MAX_READERS 40 +#define MAX_WRITERS 40  static struct  { @@ -1469,3 +1469,63 @@ gpgme_get_fdptr (int fd)  {    return NULL;  } + + +static int +wsa2errno (int err) +{ +  switch (err) +    { +    case WSAENOTSOCK: +      return EINVAL; +    case WSAEWOULDBLOCK: +      return EAGAIN; +    case ERROR_BROKEN_PIPE: +      return EPIPE; +    case WSANOTINITIALISED: +      return ENOSYS; +    default: +      return EIO; +    } +} + + +int +_gpgme_io_socket (int domain, int type, int proto) +{ +  int res; + +  TRACE_BEG2 (DEBUG_SYSIO, "_gpgme_io_socket", domain, +	      "type=%i, protp=%i", type, proto); + +  res = socket (domain, type, proto); +  if (res == INVALID_SOCKET) +    { +      errno = wsa2errno (WSAGetLastError ()); +      return TRACE_SYSRES (-1); +    } + +  TRACE_SUC1 ("socket=0x%x", res); +   +  return res; +} + + +int +_gpgme_io_connect (int fd, struct sockaddr *addr, int addrlen) +{ +  int sockfd; +  int res; + +  TRACE_BEG2 (DEBUG_SYSIO, "_gpgme_io_connect", fd, +	      "addr=%p, addrlen=%i", addr, addrlen); + +  res = connect (sockfd, addr, addrlen); +  if (!res) +    { +      errno = wsa2errno (WSAGetLastError ()); +      return TRACE_SYSRES (-1); +    } + +  return TRACE_SUC (); +} | 
