diff options
Diffstat (limited to 'assuan')
| -rw-r--r-- | assuan/ChangeLog | 13 | ||||
| -rw-r--r-- | assuan/assuan-buffer.c | 6 | ||||
| -rw-r--r-- | assuan/assuan-client.c | 8 | ||||
| -rw-r--r-- | assuan/assuan-handler.c | 2 | ||||
| -rw-r--r-- | assuan/assuan-inquire.c | 4 | ||||
| -rw-r--r-- | assuan/assuan-socket.c | 33 | ||||
| -rw-r--r-- | assuan/assuan.h | 10 | 
7 files changed, 59 insertions, 17 deletions
diff --git a/assuan/ChangeLog b/assuan/ChangeLog index 18e14ed8..8dd2ebbd 100644 --- a/assuan/ChangeLog +++ b/assuan/ChangeLog @@ -1,3 +1,16 @@ +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. +  2009-03-23  Marcus Brinkmann  <[email protected]>  	* assuan.h: Add prefix macros for _assuan_close and _assuan_usleep. diff --git a/assuan/assuan-buffer.c b/assuan/assuan-buffer.c index b9e35721..e825d9ff 100644 --- a/assuan/assuan-buffer.c +++ b/assuan/assuan-buffer.c @@ -245,11 +245,7 @@ assuan_read_line (assuan_context_t ctx, char **line, size_t *linelen)    if (!ctx)      return _assuan_error (ASSUAN_Invalid_Value); -  do -    { -      err = _assuan_read_line (ctx); -    } -  while (_assuan_error_is_eagain (err)); +  err = _assuan_read_line (ctx);    *line = ctx->inbound.line;    *linelen = ctx->inbound.linelen; diff --git a/assuan/assuan-client.c b/assuan/assuan-client.c index 15f4f1cd..e123e764 100644 --- a/assuan/assuan-client.c +++ b/assuan/assuan-client.c @@ -42,16 +42,12 @@ _assuan_read_from_server (assuan_context_t ctx, int *okay, int *off)    *off = 0;    do       { -      do -	{ -	  rc = _assuan_read_line (ctx); -	} -      while (_assuan_error_is_eagain (rc)); +      rc = _assuan_read_line (ctx);        if (rc)          return rc;        line = ctx->inbound.line;        linelen = ctx->inbound.linelen; -    }     +    }    while (*line == '#' || !linelen);    if (linelen >= 1 diff --git a/assuan/assuan-handler.c b/assuan/assuan-handler.c index b940bfd4..f504abef 100644 --- a/assuan/assuan-handler.c +++ b/assuan/assuan-handler.c @@ -630,8 +630,6 @@ process_next (assuan_context_t ctx)       required to write full lines without blocking long after starting       a partial line.  */    rc = _assuan_read_line (ctx); -  if (_assuan_error_is_eagain (rc)) -    return 0;    if (rc)      return rc;    if (*ctx->inbound.line == '#' || !ctx->inbound.linelen) diff --git a/assuan/assuan-inquire.c b/assuan/assuan-inquire.c index 58b9f029..ab710a12 100644 --- a/assuan/assuan-inquire.c +++ b/assuan/assuan-inquire.c @@ -169,9 +169,7 @@ assuan_inquire (assuan_context_t ctx, const char *keyword,      {        do           { -	  do -	    rc = _assuan_read_line (ctx); -	  while (_assuan_error_is_eagain (rc)); +	  rc = _assuan_read_line (ctx);            if (rc)              goto leave;            line = (unsigned char *) ctx->inbound.line; diff --git a/assuan/assuan-socket.c b/assuan/assuan-socket.c index 02a62253..74e8eb29 100644 --- a/assuan/assuan-socket.c +++ b/assuan/assuan-socket.c @@ -145,7 +145,10 @@ read_port_and_nonce (const char *fname, unsigned short *port, char *nonce)  int  _assuan_close (assuan_fd_t fd)  { -#if defined (HAVE_W32_SYSTEM) && !defined(_ASSUAN_IN_GPGME_BUILD_ASSUAN) +#ifdef _ASSUAN_CUSTOM_IO +  return _assuan_custom_close (fd); +#else +#ifdef (HAVE_W32_SYSTEM)    int rc = closesocket (HANDLE2SOCKET(fd));    if (rc)      errno = _assuan_sock_wsa2errno (WSAGetLastError ()); @@ -160,6 +163,7 @@ _assuan_close (assuan_fd_t fd)  #else    return close (fd);  #endif +#endif  } @@ -173,13 +177,25 @@ _assuan_sock_new (int domain, int type, int proto)    assuan_fd_t res;    if (domain == AF_UNIX || domain == AF_LOCAL)      domain = AF_INET; + +#ifdef _ASSUAN_CUSTOM_IO +  return _assuan_custom_socket (domain, type, proto); +#else    res = SOCKET2HANDLE(socket (domain, type, proto));    if (res == ASSUAN_INVALID_FD)      errno = _assuan_sock_wsa2errno (WSAGetLastError ());    return res; +#endif + +#else + +#ifdef _ASSUAN_CUSTOM_IO +  return _gpgme_io_socket (domain, type, proto);  #else    return socket (domain, type, proto);  #endif + +#endif  } @@ -208,11 +224,18 @@ _assuan_sock_connect (assuan_fd_t sockfd, struct sockaddr *addr, int addrlen)        unaddr->sun_port = myaddr.sin_port;        unaddr->sun_addr.s_addr = myaddr.sin_addr.s_addr; +#ifdef _ASSUAN_CUSTOM_IO +      ret = _assuan_custom_connect (sockfd, +				    (struct sockaddr *)&myaddr, sizeof myaddr); +#else        ret = connect (HANDLE2SOCKET(sockfd),                        (struct sockaddr *)&myaddr, sizeof myaddr); +#endif +        if (!ret)          {            /* Send the nonce. */ +            ret = _assuan_io_write (sockfd, nonce, 16);            if (ret >= 0 && ret != 16)              { @@ -220,6 +243,8 @@ _assuan_sock_connect (assuan_fd_t sockfd, struct sockaddr *addr, int addrlen)                ret = -1;              }          } +      else +        errno = _assuan_sock_wsa2errno (WSAGetLastError ());        return ret;      }    else @@ -231,8 +256,14 @@ _assuan_sock_connect (assuan_fd_t sockfd, struct sockaddr *addr, int addrlen)        return res;      }        #else + +#ifdef _ASSUAN_CUSTOM_IO +  return _assuan_custom_connect (sockfd, addr, addrlen); +#else    return connect (sockfd, addr, addrlen);  #endif + +#endif  } diff --git a/assuan/assuan.h b/assuan/assuan.h index 4cf6a034..971ff4d9 100644 --- a/assuan/assuan.h +++ b/assuan/assuan.h @@ -77,6 +77,7 @@ int _gpgme_io_read (int fd, void *buffer, size_t count);  int _gpgme_io_write (int fd, const void *buffer, size_t count);  int _gpgme_io_sendmsg (int sock, const struct msghdr *msg, int flags);  int _gpgme_io_recvmsg (int sock, struct msghdr *msg, int flags); +int _gpgme_io_socket (int domain, int type, int proto);  #define _assuan_funopen _gpgme_funopen @@ -90,6 +91,15 @@ int _gpgme_io_recvmsg (int sock, struct msghdr *msg, int flags);  #define sendmsg	      _gpgme_io_sendmsg  #define recvmsg       _gpgme_io_recvmsg  #endif /*_ASSUAN_IN_GPGME_BUILD_ASSUAN*/ + +#define _ASSUAN_CUSTOM_IO 1 +#define _assuan_custom_close _gpgme_io_close +#define _assuan_custom_read _gpgme_io_read +#define _assuan_custom_write _gpgme_io_write +#define _assuan_custom_pipe _gpgme_io_pipe +#define _assuan_custom_socket _gpgme_io_socket +#define _assuan_custom_connect _gpgme_io_connect +  /**** End GPGME specific modifications. ******/  | 
