aboutsummaryrefslogtreecommitdiffstats
path: root/assuan
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2009-04-08 18:53:57 +0000
committerMarcus Brinkmann <[email protected]>2009-04-08 18:53:57 +0000
commitd255b4bec9a1fdf0864640750161ea12999e43a5 (patch)
tree75e870ff7e07cb4f2bf30dc8a136c72eb4bf6bd4 /assuan
parent2009-03-23 Marcus Brinkmann <[email protected]> (diff)
downloadgpgme-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/ChangeLog13
-rw-r--r--assuan/assuan-buffer.c6
-rw-r--r--assuan/assuan-client.c8
-rw-r--r--assuan/assuan-handler.c2
-rw-r--r--assuan/assuan-inquire.c4
-rw-r--r--assuan/assuan-socket.c33
-rw-r--r--assuan/assuan.h10
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. ******/