diff options
author | Patrick Steinhardt <ps@pks.im> | 2019-01-23 15:49:28 +0100 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2019-01-31 13:46:38 +0000 |
commit | 7613086df460948f728e9f0534457c8af6fa522b (patch) | |
tree | 4fd8826b0a84f6d9a8e152ee2b777ca2ba57ba09 | |
parent | 5265b31cc5adb3ff27dddb8cbbc1f4b1c687f73e (diff) | |
download | libgit2-7613086df460948f728e9f0534457c8af6fa522b.tar.gz |
streams: handle short writes only in generic stream
Now that the function `git_stream__write_full` exists and callers of
`git_stream_write` have been adjusted, we can lift logic for short
writes out of the stream implementations. Instead, this is now handled
either by `git_stream__write_full` or by callers of `git_stream_write`
directly.
-rw-r--r-- | src/streams/mbedtls.c | 13 | ||||
-rw-r--r-- | src/streams/socket.c | 18 |
2 files changed, 11 insertions, 20 deletions
diff --git a/src/streams/mbedtls.c b/src/streams/mbedtls.c index 7ca3aa6e4..3a440e3c4 100644 --- a/src/streams/mbedtls.c +++ b/src/streams/mbedtls.c @@ -303,20 +303,15 @@ static int mbedtls_set_proxy(git_stream *stream, const git_proxy_options *proxy_ return git_stream_set_proxy(st->io, proxy_options); } -static ssize_t mbedtls_stream_write(git_stream *stream, const char *data, size_t data_len, int flags) +static ssize_t mbedtls_stream_write(git_stream *stream, const char *data, size_t len, int flags) { - ssize_t written = 0, len = min(data_len, SSIZE_MAX); mbedtls_stream *st = (mbedtls_stream *) stream; + int written; GIT_UNUSED(flags); - do { - int error = mbedtls_ssl_write(st->ssl, (const unsigned char *)data + written, len - written); - if (error <= 0) { - return ssl_set_error(st->ssl, error); - } - written += error; - } while (written < len); + if ((written = mbedtls_ssl_write(st->ssl, (const unsigned char *)data, len)) <= 0) + return ssl_set_error(st->ssl, written); return written; } diff --git a/src/streams/socket.c b/src/streams/socket.c index 7134db449..066580f64 100644 --- a/src/streams/socket.c +++ b/src/streams/socket.c @@ -130,23 +130,19 @@ static int socket_connect(git_stream *stream) return 0; } -static ssize_t socket_write(git_stream *stream, const char *data, size_t data_len, int flags) +static ssize_t socket_write(git_stream *stream, const char *data, size_t len, int flags) { - ssize_t ret, off = 0, len = min(data_len, SSIZE_MAX); git_socket_stream *st = (git_socket_stream *) stream; + ssize_t written; - while (off < len) { - errno = 0; - ret = p_send(st->s, data + off, len - off, flags); - if (ret < 0) { - net_set_error("Error sending data"); - return -1; - } + errno = 0; - off += ret; + if ((written = p_send(st->s, data, len, flags)) < 0) { + net_set_error("Error sending data"); + return -1; } - return off; + return written; } static ssize_t socket_read(git_stream *stream, void *data, size_t len) |