Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
imap-send: use separate read and write fds
author
Erik Faye-Lund
<kusmabite@googlemail.com>
Mon, 19 Oct 2009 15:42:03 +0000
(17:42 +0200)
committer
Junio C Hamano
<gitster@pobox.com>
Tue, 20 Oct 2009 05:17:36 +0000
(22:17 -0700)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
imap-send.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
3a7cba9
)
diff --git
a/imap-send.c
b/imap-send.c
index 8da7a9493155cc8fbffcaace9c06865b6c9865d8..7216453ceb428ecffa90118c7335a061e92fc524 100644
(file)
--- a/
imap-send.c
+++ b/
imap-send.c
@@
-151,7
+151,7
@@
struct imap_list {
};
struct imap_socket {
};
struct imap_socket {
- int fd;
+ int fd
[2]
;
SSL *ssl;
};
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;
}
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;
}
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 = 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);
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;
}
}
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 = 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);
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;
}
}
return n;
}
@@
-358,7
+364,8
@@
static void socket_shutdown(struct imap_socket *sock)
SSL_free(sock->ssl);
}
#endif
SSL_free(sock->ssl);
}
#endif
- close(sock->fd);
+ close(sock->fd[0]);
+ close(sock->fd[1]);
}
/* simple line buffering */
}
/* simple line buffering */
@@
-911,7
+918,7
@@
static void imap_close_server(struct imap_store *ictx)
{
struct imap *imap = ictx->imap;
{
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);
}
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);
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 */
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]);
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 {
imap_info("ok\n");
} else {
@@
-1043,7
+1051,8
@@
static struct store *imap_open_store(struct imap_server_conf *srvc)
goto bail;
}
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)) {
if (srvc->use_ssl &&
ssl_socket_connect(&imap->buf.sock, 0, srvc->ssl_verify)) {