From: Erik Faye-Lund <kusmabite@googlemail.com>
To: git@vger.kernel.org
Cc: msysgit@googlegroups.com, Erik Faye-Lund <kusmabite@gmail.com>
Subject: [PATCH v5 2/8] imap-send: use separate read and write fds
Date: Wed, 21 Oct 2009 19:04:45 +0200 [thread overview]
Message-ID: <1256144691-2908-3-git-send-email-kusmabite@gmail.com> (raw)
In-Reply-To: <1256144691-2908-2-git-send-email-kusmabite@gmail.com>
This is a patch that enables us to use the run-command
API, which is supported on Windows.
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
imap-send.c | 37 +++++++++++++++++++++++--------------
1 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/imap-send.c b/imap-send.c
index 8da7a94..7216453 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -151,7 +151,7 @@ struct imap_list {
};
struct imap_socket {
- int fd;
+ int fd[2];
SSL *ssl;
};
@@ -301,8 +301,12 @@ static int ssl_socket_connect(struct imap_socket *sock, int use_tls_only, int ve
ssl_socket_perror("SSL_new");
return -1;
}
- if (!SSL_set_fd(sock->ssl, sock->fd)) {
- ssl_socket_perror("SSL_set_fd");
+ if (!SSL_set_rfd(sock->ssl, sock->fd[0])) {
+ ssl_socket_perror("SSL_set_rfd");
+ return -1;
+ }
+ if (!SSL_set_wfd(sock->ssl, sock->fd[1])) {
+ ssl_socket_perror("SSL_set_wfd");
return -1;
}
@@ -324,11 +328,12 @@ static int socket_read(struct imap_socket *sock, char *buf, int len)
n = SSL_read(sock->ssl, buf, len);
else
#endif
- n = xread(sock->fd, buf, len);
+ n = xread(sock->fd[0], buf, len);
if (n <= 0) {
socket_perror("read", sock, n);
- close(sock->fd);
- sock->fd = -1;
+ close(sock->fd[0]);
+ close(sock->fd[1]);
+ sock->fd[0] = sock->fd[1] = -1;
}
return n;
}
@@ -341,11 +346,12 @@ static int socket_write(struct imap_socket *sock, const char *buf, int len)
n = SSL_write(sock->ssl, buf, len);
else
#endif
- n = write_in_full(sock->fd, buf, len);
+ n = write_in_full(sock->fd[1], buf, len);
if (n != len) {
socket_perror("write", sock, n);
- close(sock->fd);
- sock->fd = -1;
+ close(sock->fd[0]);
+ close(sock->fd[1]);
+ sock->fd[0] = sock->fd[1] = -1;
}
return n;
}
@@ -358,7 +364,8 @@ static void socket_shutdown(struct imap_socket *sock)
SSL_free(sock->ssl);
}
#endif
- close(sock->fd);
+ close(sock->fd[0]);
+ close(sock->fd[1]);
}
/* simple line buffering */
@@ -911,7 +918,7 @@ static void imap_close_server(struct imap_store *ictx)
{
struct imap *imap = ictx->imap;
- if (imap->buf.sock.fd != -1) {
+ if (imap->buf.sock.fd[0] != -1) {
imap_exec(ictx, NULL, "LOGOUT");
socket_shutdown(&imap->buf.sock);
}
@@ -939,7 +946,7 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
ctx = xcalloc(sizeof(*ctx), 1);
ctx->imap = imap = xcalloc(sizeof(*imap), 1);
- imap->buf.sock.fd = -1;
+ imap->buf.sock.fd[0] = imap->buf.sock.fd[1] = -1;
imap->in_progress_append = &imap->in_progress;
/* open connection to IMAP server */
@@ -966,7 +973,8 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
close(a[0]);
- imap->buf.sock.fd = a[1];
+ imap->buf.sock.fd[0] = a[1];
+ imap->buf.sock.fd[1] = dup(a[1]);
imap_info("ok\n");
} else {
@@ -1043,7 +1051,8 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
goto bail;
}
- imap->buf.sock.fd = s;
+ imap->buf.sock.fd[0] = s;
+ imap->buf.sock.fd[1] = dup(s);
if (srvc->use_ssl &&
ssl_socket_connect(&imap->buf.sock, 0, srvc->ssl_verify)) {
--
1.6.4.msysgit.0
next prev parent reply other threads:[~2009-10-21 17:06 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-21 17:04 [PATCH v5 0/8] imap-send: Windows support Erik Faye-Lund
2009-10-21 17:04 ` [PATCH v5 1/8] imap-send: remove useless uid code Erik Faye-Lund
2009-10-21 17:04 ` Erik Faye-Lund [this message]
2009-10-21 17:04 ` [PATCH v5 3/8] imap-send: use run-command API for tunneling Erik Faye-Lund
2009-10-21 17:04 ` [PATCH v5 4/8] imap-send: fix compilation-error on Windows Erik Faye-Lund
2009-10-21 17:04 ` [PATCH v5 5/8] imap-send: build imap-send " Erik Faye-Lund
2009-10-21 17:04 ` [PATCH v5 6/8] mingw: wrap SSL_set_(w|r)fd to call _get_osfhandle Erik Faye-Lund
2009-10-21 17:04 ` [PATCH v5 7/8] mingw: enable OpenSSL Erik Faye-Lund
2009-10-21 17:04 ` [PATCH v5 8/8] MSVC: Enable OpenSSL, and translate -lcrypto Erik Faye-Lund
2009-10-22 18:38 ` [msysGit] [PATCH v5 7/8] mingw: enable OpenSSL Johannes Sixt
2009-10-22 17:42 ` [msysGit] [PATCH v5 0/8] imap-send: Windows support Johannes Schindelin
2009-10-22 18:11 ` [msysGit] " Johannes Sixt
2009-10-22 18:26 ` [PATCH ef/msys-imap] mingw: use BLK_SHA1 again Johannes Sixt
2009-10-26 22:26 ` Johannes Schindelin
2009-10-27 6:56 ` Johannes Sixt
2009-10-22 19:20 ` [msysGit] Re: [PATCH v5 0/8] imap-send: Windows support Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1256144691-2908-3-git-send-email-kusmabite@gmail.com \
--to=kusmabite@googlemail.com \
--cc=git@vger.kernel.org \
--cc=kusmabite@gmail.com \
--cc=msysgit@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.