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 /assuan | |
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 '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. ******/ |